以下代码可以查询到数据:
String returnStr="";  
String sql="select name from table1 t where t.lot_id  in ('tab1','tab2')";
System.out.println(sql);
stmt =  conn.prepareStatement(sql);
rset=stmt.executeQuery();            
        while(rset.next())
           {   
           returnStr= rset.getString(1);
System.out.println("returnStr:"+returnStr 
  }
rset.close();
st.close();--------------------------------------------------------
但是为何以下代码写法却查不到数据?
String returnStr="‘"; 
String str=="'tab1','tab2'"; 
String sql="select name from table1 t where t.lot_id  in (?)";
System.out.println(sql);
stmt =  conn.prepareStatement(sql);
stmt.setString(1, str); 
rset=stmt.executeQuery();            
while(rset.next())
{   
        returnStr= rset.getString(1);
System.out.println("returnStr:"+returnStr 
}
rset.close();
st.close();

解决方案 »

  1.   

    String sql="select name from table1 t where t.lot_id  in (?)";
    是不是些少啦单引号
      

  2.   

    String sql="select name from table1 t where t.lot_id  in (‘?’)
      

  3.   

    因为PrepareStatement是会预先编译SQL的,也就是说,他编译的时候就认为里面只有一个参数,
    而你把这个String str="'tab1','tab2'";传递给了那个参数
    最后执行的SQL相当于是这样
    select name from table1 t where t.lot_id  in ('tab1,tab2')";
    所以你要写2个问号在里面,分别
    String str="tab1";
    String str2="tab2";
    select name from table1 t where t.lot_id  in (?,?)";
    stmt.setString(1, str); 
    stmt.setString(2, str2); 
    注意,一般符号都是用英文的
      

  4.   

    String sql = "select name from table1 t ";
    if (array != null && array.length != 0) {
      sql += " where t.lot_id  in ("
      for (int i = 0; i < array.length; i++) {
        sql += array[i] + "," 
      }
      sql = sql.substring(0,sql.length() - 1) + ")";
    }
    stmt =  conn.prepareStatement(sql);
    if (array != null && array.length != 0) {
      for (int i = 0; i < array.length; i++) {
        stmt.setString(i + 1, array[i]); 
      }
    }
      

  5.   

    不好意思写错了
    应该是这样
    String sql = "select name from table1 t ";
    if (array != null && array.length != 0) {
      sql += " where t.lot_id  in ("
      for (int i = 0; i < array.length; i++) {
        sql += + "?," 
      }
      sql = sql.substring(0,sql.length() - 1) + ")";
    }
    stmt =  conn.prepareStatement(sql);
    if (array != null && array.length != 0) {
      for (int i = 0; i < array.length; i++) {
        stmt.setString(i + 1, array[i]); 
      }