问在oracle数据库中   
  SQL   =   "select   *   from   table   where   modeCode   in   (?)";   
  ..   
    
  PreparedStatement   stmt   =   conn.preparedStatement(SQL);   
  stmt.setString(1,   "param1,param2,param3");   
  rs   =   stmt.executeQuery();   
    
  上述语句执行后没有记录被得到,系统也没有报错,不知是什么问题。.因为IN   语句可以动态变化有多个条件,难道是设置入一个数组?   用PreparedStatement处理in的SQL语句到底应该怎么写谢谢  

解决方案 »

  1.   

    你有 x 个参数,就拼凑含有 x 个 ?的SQL。
    再 conn.preparedStatement(SQL);
      

  2.   

    实在不行可以手动将内容放入一个数组或者集合中,然后每取出一个元素就加上一个逗号,当然是英文下的逗号。再循环体内加上一个判断:如果该循环为最后一次,那么不加逗号。可以用一个标志位来判断。
    我不清楚PreparedStatement到底该如何写,但我认为这样应该能够解决您的问题。
      

  3.   

    PreparedStatement是从1开始吗?PreparedStatement我没有用过,不清楚。但hibernate的起始位是从0开始的。
    如有错,请原谅
      

  4.   

    像in查询语句,每次查询in里面的参数个数可能不相同的,不知道用in查询的方式使用PreparedStatement和Statement谁的效率更高
      

  5.   

    那样写当然会抛异常SQL  =  "select  *  from  table  where  modeCode  in  ("+"param1,param2,param3"+")";  
      ..  
        
      PreparedStatement  stmt  =  conn.preparedStatement(SQL);  
      rs  =  stmt.executeQuery();  我就是这样用的
      

  6.   

    想绑定in里面的变量只能用pl/sql,就是写存储过程
      

  7.   

    参数不对
      SQL  =  "select  *  from  table  where  modeCode  in  (?,?,?)";  
      ..  
        
      PreparedStatement  stmt  =  conn.preparedStatement(SQL);  
      stmt.setString(1, parm1);  
      stmt.setString(2, parm2); 
      stmt.setString(3, parm3); 
      rs  =  stmt.executeQuery(); 
    应该是这样的,in()里面是你的参数值,你用一个 ?那就等于  SQL  =  "select  *  from  table  where  modeCode  = ?";  
      

  8.   

    8楼正解
    ----------
    JAVA技术文档里面给出的示例,相信你能看懂了
    PreparedStatement pstmt = con.prepareStatement("UPDATE EMPLOYEES SET SALARY = ? WHERE ID = ?");
       pstmt.setBigDecimal(1, 153833.00)
       pstmt.setInt(2, 110592)