在java中:
我准备用
String sql=" select * from mytable where ? like '%?%' ";
PreparedStatement psmt = conn.prepareStatement(sql);
psmt.setString(1,"bookname"); //表的字段名
psmt.setString(2,"Spring"); //搜索的关键字 ResultSet rs = psmt.executeQuery(); //执行查询
出现了两个问题:
1.报错:java.lang.ArrayIndexOutOfBoundsException: 1
// 应该是 like 后面的 '%?%' 有问题;占位符不应该出现在单引号中吧……但我没办法
2.假设将第二个参数改为一个固定值:(如)
String sql=" select * from mytable where ? like '%Spring%' ";
但是结果集中没有任何数据,我后来试验了一下,应该是 PreparedStatement 对象在 set 操作时会在占位符的位置加上引号
最终组织的 sql 语句就变成了 select * from mytable where 'bookname' like '%Spring%'
我就没辙了……
帮帮忙呀……(我坚持用 PreparedStatement )
我准备用
String sql=" select * from mytable where ? like '%?%' ";
PreparedStatement psmt = conn.prepareStatement(sql);
psmt.setString(1,"bookname"); //表的字段名
psmt.setString(2,"Spring"); //搜索的关键字 ResultSet rs = psmt.executeQuery(); //执行查询
出现了两个问题:
1.报错:java.lang.ArrayIndexOutOfBoundsException: 1
// 应该是 like 后面的 '%?%' 有问题;占位符不应该出现在单引号中吧……但我没办法
2.假设将第二个参数改为一个固定值:(如)
String sql=" select * from mytable where ? like '%Spring%' ";
但是结果集中没有任何数据,我后来试验了一下,应该是 PreparedStatement 对象在 set 操作时会在占位符的位置加上引号
最终组织的 sql 语句就变成了 select * from mytable where 'bookname' like '%Spring%'
我就没辙了……
帮帮忙呀……(我坚持用 PreparedStatement )
String field = "bookname";
String sql="SELECT * FROM mytable WHERE " + field + " LIKE ?";
PreparedStatement psmt = conn.prepareStatement(sql);
psmt.setString(1,"%Spring%"); //搜索的关键字
ResultSet rs = psmt.executeQuery(); //执行查询
if(fileld.equalsIgnoreCase("bookname")) {
sql="SELECT * FROM mytable WHERE bookname LIKE ?";
}else if(fileld.equalsIgnoreCase("author")) {
sql="SELECT * FROM mytable WHERE author LIKE ?";
}else if ... {
...
}