读书人

关于prepareStatement的setString有关

发布时间: 2011-12-30 23:30:45 作者: rapoo

关于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( " ?, ");

}
}

後面塞值也可以子,很方便
上面的例子 我是手的
需要稍作修改才能使用

读书人网 >J2SE开发

热点推荐