场景是做个对数据库A表字段CONTENT的模糊查询。
语句类似:
PreparedStatement stmt = conn.prepareStatement("select * from A where CONTENT like ? ");
String searchString = "aa";//匹配内容
stmt.setString(1,"%" + searchString + "%");
这个语句匹配包含searchString 为"aa"内容的数据,但如果传入的不是 "aa",而含特殊的符号如 "%",
就可查询出来所有的数据。
一个解决的办法是将语句改为:"select * from A where CONTENT like ? ESCAPE '\'"
然后再对searchString进行一下预处理(在"%:","_","\" 字符前附加"\").
感觉这个方法还是比较拖沓,而且本质上还是需要程序去转义sql,而不是依赖数据库本身来处理.
不知各位有什么比较好的处理方法?