关于jdbc预编译下模糊查询的写法

Posted famouslion

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于jdbc预编译下模糊查询的写法相关的知识,希望对你有一定的参考价值。

PreparedStatement预编译的SQL可以有效的防止SQL注入,但是有些写法需要值得注意。

Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/ssm","root","root");
            StringBuffer sql =new StringBuffer("select ID,COMMAND,DESCRIPTION,CONTENT from message where 1=1") ;
            ArrayList<String> args = new ArrayList<String>();
            if(command!=null&&!"".equals(command)){
                sql.append(" and COMMAND=?");
                args.add(command);
            }
            if(description!=null&&!"".equals(description)){
                sql.append(" and DESCRIPTION like concat(‘%‘,?,‘%‘)");
                args.add(description);
            }
            PreparedStatement ps = conn.prepareStatement(sql.toString());
            for(int i=0;i<args.size();i++){
                ps.setString(i+1, args.get(i));
            }
            
            ResultSet rs = ps.executeQuery();

 

最关键的部分在

sql.append(" and DESCRIPTION like concat(‘%‘,?,‘%‘)");

使用concat可以有效地拼接字符串

以上是关于关于jdbc预编译下模糊查询的写法的主要内容,如果未能解决你的问题,请参考以下文章

mybatis中llike模糊查询中#和$的使用,以及bind标签的使用

关于JDBC预处理功能PreparedStatement

JAVA带预编译的模糊查询问题

PDO预编译语句执行查询与DML操作

JDBC预编译SQL与防注入式攻击

Mybatis单表多表查询,动态SQL使用