String sql="select * from book where name in(?)";  
PreparedStatement ps = con.prepareStatement(sql);  
String name = "'A','B','C'";  
ps.setString(1, name);  
ResultSet rs = ps.executeQuery();  
while(rs.next())  
{  
         System.out.println("get one");  
}  
用上面这段代码查不到记录,但是用下面的代码是可以查到记录的。
String sql="select * from book where name in ('A','B','C')";  
PreparedStatement ps = con.prepareStatement(sql);  
//String name = "'A','B','C'";  
//ps.setString(1, name);  
ResultSet rs = ps.executeQuery();  
while(rs.next())  
{  
         System.out.println("get one");  
}  不知道为什么,请各位达人多多指点。谢谢!

解决方案 »

  1.   

    前面那个ps输出为select * from book where name in('\'A\',\'B\',\'C\'')
    楼主可以看看
      

  2.   

    String sql="select * from book where name in(?)"; in后边是个集合,应该是String sql="select * from book where name in(?,?,?)"; setCharacter
      

  3.   

    谢谢大家指点。to believefym(暮色,miss,迷失,miss) 
    我估计是setString()的问题,可是不知道怎么写才能让ps输出select * from book where name in ('A','B','C'),不知能否赐教?谢谢。 另外,我用的是eclipse,怎么才能看到ps的输出呢?
    to crazycy(代言人)
    sql中in后面的确是个集合,但现在它不是固定的,就是可能是('A','B','C'),也可能是('A','B')或者('A','D'),或者更多。 所以我想用一个"?" 来根据不同情况传入不同的集合,不知道这样可不可以?望赐教。谢谢。
      

  4.   

    debug,设置断点看一下ps的内容,也可以在程序里System.out.println(ps)看
      

  5.   

    这里setString可能行不通,setString(int i, String str)只能处理一个?,自动把str加单引号后当一个部分处理
      

  6.   

    to  believefym(暮色,miss,迷失,miss) 
    谢谢指点。
    用debug看可以看到 ps-->m_sql-->processedSql= "select * from book where name in (:1)",但是看不到"select * from book where name in('\'A\',\'B\',\'C\'')"。
    在程序里用System.out.println(ps)应该看不到吧,ps 是个对象,在控制台只能输出它的地址吧。
      

  7.   

    to  believefym(暮色,miss,迷失,miss) 
    那有没有办法可以实现我需要的那种效果呢?只传一个参数的。
      

  8.   


    目前的PreparedStatement ,不支持in进行不定个数的参数.不过Hibernate里好像变通的实现了这个功能,
    参考一下Hibernate的源代码,或许有办法.
      

  9.   

    to  believefym(暮色,miss,迷失,miss) 
    谢谢指点。
    用debug看可以看到 ps-->m_sql-->processedSql= "select * from book where name in (:1)",但是看不到"select * from book where name in('\'A\',\'B\',\'C\'')"。
    在程序里用System.out.println(ps)应该看不到吧,ps 是个对象,在控制台只能输出它的地址吧。
    ==========================================
    你的断点可能没设好吧
    ps应该覆写toString方法,除了地址,后面会输出sql语句,楼主试试好了
      

  10.   

    谢谢pigo() ,believefym(暮色,miss,迷失,miss) 。to pigo()
    我还没用过 Hibernate, 如果方便的话,能否帮我找找看,先谢了。要回家了,明天来结贴。
      

  11.   

    举一个列子(niit书上所写)
    PreparedStatement stat=con.prepareStatement(“Select * from publishers where pub_id = ?”); 
    stat.setString(1,pid.getText());
    ResultSet result=stat.executeQuery();楼主可以看看
      

  12.   

    to haitun88(海豚) 
     谢谢。
     getText()好像是swing中常用的方法吧,不知道你代码中的pid代表什么对象。
    =======================================================================问题还没有解决,不知道大家有没有更好的意见啊
      

  13.   

    String sql="select * from book where name in(?,?,?)";  
    PreparedStatement ps = con.prepareStatement(sql);  
    String name1 = "A";
    String name2= "B";
    String name3 = "C";
    pssetString(1, name1); 
    pssetString(2, name2); 
    pssetString(3, name3);    
    ResultSet rs = ps.executeQuery();  
    while(rs.next())  
    {  
             System.out.println("get one");  
    }
      

  14.   

    to  ArsenalFans(ArsenalFans) 
    谢谢。这是最后的方法,我其实就是想知道,按我的那个思路到底有没有办法实现。
    ---------------------------------------------------------------------------to wu_zhi_hui(苦海无涯,回头是岸) 
    谢谢。 不过我前面已经说过了,参数不一定是三个的。
    ---------------------------------------------------------------------------各位达人,再帮忙看看啊。如果问题解决可以另外开贴给分。