psmtUpdate.setString(1, "1,2,3");psmtUpdate.executeQuery();SQL: SELECT * FROM USER WHERE USER_ID IN (?)执行的时候总是报错误:ora-01722 无效数字,请高手指点一下,非常感激您的关注

解决方案 »

  1.   

    in 里面有几个 就设置几个问号吧 PreparedStatement pstmt = conn.prepareStatement("select * from users where id in (?,?)");
        pstmt.setString(1,"1");
        pstmt.setString(2,"4");
       
        ResultSet rs = pstmt.executeQuery();
        System.out.println("------------");
        while(rs.next()) {
         System.out.println(rs.getString(1)+"@"+rs.getString(2));
        }
      

  2.   

    USER_ID  是否为 varchar 类型的字段?
      

  3.   

    这样 他会把 "1,2" 当成一个匹配条件 肯定会报异常生成sql的时候解析一下"1,2,3" 类似的 动态的生成sql吧或者不用preparedStatement 直接用Statement 
      

  4.   

    楼主这样写法,数据库会理解成“问号的位置处有一个字符串”,而不会因为这个字符串是用逗号分隔的三个数字,就理解成“问号的位置处有三个整数”。从语法上说(从错误信息判断),在 SQL 语句中,问号的地方应该出现若干个整数值。所以,像 interpb 所说,“in 里面有几个 就设置几个问号吧”,不过,应该用 setInt() 而不是 setString()。
      

  5.   

    psmtUpdate.setString(1, "'1','2','3'");
    引号忘了。如果user_id是int类型,使用in是错误的。
      

  6.   

    同意interpb(曾曾胡,深怕情多累美人!)的說先把字符串拆開,放到數組裡,然後通過循環塞值,非常OK!
    StringBuffer sql=new StringBuffer();
    sql.append("select * from users where id in(" );String[] data="1,2,3,4,5".split(','5);
    for(int i=0;i<data.length;i++){
    if(i==data.length-1){
    sql.append(" ? ");
    }else{
    sql.append(" ?,");}
    }後面塞值也可以這樣子,很方便
    上面的例子 我是隨手寫的
    需要稍作修改才能使用