为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

正在回答

5 回答

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();


0 回复 有任何疑惑可以回复我~

不用这么麻烦,你可以定义个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));//调试输出参数值
                }
            }


0 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~
#1

Liiu

不是这个原因,还是要要setString 老师的没问题
2016-07-10 回复 有任何疑惑可以回复我~

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

1 回复 有任何疑惑可以回复我~
#1

Liiu

为什么我用老师的也不能查询 描述条件框
2016-07-10 回复 有任何疑惑可以回复我~
#2

Night_Fever 回复 Liiu

mysql中拼接字符串是用空格'%' ? '%'。注意‘%’和?之间是有空格的。
2016-07-10 回复 有任何疑惑可以回复我~

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

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

如下图:

http://img1.sycdn.imooc.com//5757623d0001db4816000900.jpg

5757628f000171a805000282.jpg

5757629200010bc605000281.jpg

575762930001493805000282.jpg


0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

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

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信