在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 )
 

解决方案 »

  1.   

    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(); //执行查询
      

  2.   

    或者,可以判断一下所需要的字段,来选择不同的 SQL 语句。String sql = "";
    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 ... {
    ...
    }