关于prepareStatement的setString问题!请高手指教
psmtUpdate.setString(1, "1,2,3 ");
psmtUpdate.executeQuery();
SQL: SELECT * FROM USER WHERE USER_ID IN (?)
执行的时候总是报错误:ora-01722 无效数字,请高手指点一下,非常感激您的关注
------解决方案--------------------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));
}
------解决方案--------------------USER_ID 是否为 varchar 类型的字段?
------解决方案--------------------这样 他会把 "1,2 " 当成一个匹配条件 肯定会报异常
生成sql的时候解析一下 "1,2,3 " 类似的 动态的生成sql吧
或者不用preparedStatement 直接用Statement
------解决方案--------------------psmtUpdate.setString(1, " '1 ', '2 ', '3 ' ");
引号忘了。
如果user_id是int类型,使用in是错误的。
------解决方案--------------------同意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( " ?, ");
}
}
後面塞值也可以這樣子,很方便
上面的例子 我是隨手寫的
需要稍作修改才能使用