mysql预编译模糊查询恶心了我一天的时间,终于弄好了。但是还有一点不明白。如下:

来源:2-6 列表查询

java家洼

2016-06-08 01:09

http://img.mukewang.com/5756ff870001107215980894.jpg为什么用serNString方法能行,用setString方法死活不行。我真晕了。

写回答 关注

5回答

  • 红袖侍读
    2016-08-10 01:53:23

    Sorry,上面的代码有错,没考虑同时传指令和描述的情况,改成如下这样就没问题了。当然最好最简洁的写法还是老师那样,在拼接时就设定好,后面直接传参

            boolean descFlag=false,cmdFlag=false;
            
            if (cmd!=null && !"".equals(cmd.trim())){
                sql.append(" and command=?");
                cmdFlag=true;//指令传参,标记改为真
            }
            
            if (desc!=null && !"".equals(desc.trim())){
                sql.append(" and description like ?");
                descFlag=true; //描述传参,标记改为真
            }
            
            try {
                ps = conn.prepareStatement(sql.toString());
                
                int index=0; //参数索引值
                
                //两个标记里若为真,说明有参,用参数取代占位符,否则跳过
                if (cmdFlag)
                    ps.setString(++index, cmd);
                if (descFlag)
                    ps.setString(++index, "%"+desc+"%");
    
                rs = ps.executeQuery();


  • 红袖侍读
    2016-08-09 23:37:47

    不用这么麻烦,你可以定义个boolean的变量,用来记录传参是不是description,如果是,在paramList的循环里做模糊拼接,不是,就不用

            boolean descFlag=false; //标记传来的参数是否为description,为后面的模糊查询SQL语句拼接做准备
            if (desc!=null && !"".equals(desc.trim())){
                sql.append(" and description like ?");
                descFlag=true; //如果传参description,设为真
                paramList.add(desc);
            }
            
            try {
                //System.out.println(sql.toString()); //用于调试输出SQL语句
                ps = conn.prepareStatement(sql.toString());
                if (paramList.size()>0){
                    for (int i=0;i<paramList.size();i++){
                        //如果flag为真,做模糊查询拼接,否则,无需拼接
                        if (descFlag)
                            ps.setString(i+1, "%"+paramList.get(i)+"%");
                        else
                            ps.setString(i+1, paramList.get(i));
                        
                        //System.out.println(paramList.get(i));//调试输出参数值
                    }
                }


  • Liiu
    2016-07-10 01:32:37

    感谢楼主,setNString 暂不知道原因 不过总算是可以条件查询了

    Liiu

    不是这个原因,还是要要setString 老师的没问题

    2016-07-10 14:21:40

    共 1 条回复 >

  • 岳阳白少
    2016-06-28 03:08:00

    老师的也可以进行同时查询呀,没问题呀。

    Night_... 回复Liiu

    mysql中拼接字符串是用空格'%' ? '%'。注意‘%’和?之间是有空格的。

    2016-07-10 03:12:21

    共 2 条回复 >

  • java家洼
    2016-06-08 08:11:34

    以上这种方法只可以用于查询   描述 文本框 的情况,不能用于查询  命令名称  文本框的 情况。所以以上这种方法是错误的。我昨晚一时激动,冲昏了头脑。

    今天我早上起来,精神充沛,思维活跃,终于相出了方法,虽然看起来臃肿,但是两种查询 都可以 同时 成功了。

    如下图:

    http://img.mukewang.com/5757623d0001db4816000900.jpg

    5757628f000171a805000282.jpg

    5757629200010bc605000281.jpg

    575762930001493805000282.jpg


通过自动回复机器人学Mybatis---基础版

微信公众号自动回复功能学习Mybatis,基础教程加案例实战方式学习

107412 学习 · 786 问题

查看课程

相似问题