日期:2014-05-17  浏览次数:21126 次

请问JDBC中IN语句怎么构建?
JDBC中关于IN的使用问题:

SELECT * FROM TABLE_A WHERE A_COLUMN_NAME IN('A','B','C')

我想使用PreparedStatement setObject()设置参数的方法来构建语句SELECT * FROM TABLE_A WHERE A_COLUMN_NAME IN(?)
怎么来构建?


------解决方案--------------------
SELECT * FROM TABLE_A WHERE A_COLUMN_NAME IN(?,?,?)
PreparedStatement ps;
……
……
ps.setString(1,'A');
ps.setString(2,'B');
ps.setString(3,'C');

这样就可以了
------解决方案--------------------
传数组嘛,多灵活。
------解决方案--------------------
探讨
SELECT * FROM TABLE_A WHERE A_COLUMN_NAME IN(?,?,?)
PreparedStatement ps;
……
……
ps.setString(1,'A');
ps.setString(2,'B');
ps.setString(3,'C');

这样就可以了

------解决方案--------------------
楼上的方法可用,可是如果in的参数的个数有变化,就没办法了,比如现在由3个增加到5个。这个确实没有什么好的方法,如果谁有,我也学习学习。
------解决方案--------------------
参数变化只能拼字符串了

------解决方案--------------------
SELECT * FROM TABLE_A WHERE A_COLUMN_NAME IN(?)
ps.setString(1,"楼主想要拼的字符串");



------解决方案--------------------
办法同上
------解决方案--------------------
探讨
SELECT * FROM TABLE_A WHERE A_COLUMN_NAME IN(?)
ps.setString(1,"楼主想要拼的字符串");

------解决方案--------------------
6楼的办法不行的

用PreparedStatement 传多参数时,如果参数个数不确定,还想使用?参数避免sql注入,只有一个办法
根据传递的参数个数,拼接sql语句为 SELECT * FROM TABLE_A WHERE A_COLUMN_NAME IN(?, ? ,?, ……)
然后再依次
ps.setString(1, "参数1");
ps.setString(2, "参数2");
ps.setString(3, "参数3");
……
除此以外,没其他办法。
------解决方案--------------------
如果不需要考虑sql注入,也可以采用把参数直接拼到sql语句中的办法,不过不推荐
------解决方案--------------------
楼主你把你怎么拼的字符串,打出来
------解决方案--------------------
同意#9楼
 SELECT * FROM TABLE_A WHERE A_COLUMN_NAME IN(?, ? ,?, ……)

传参数我建议传送个数组
String [] param={参数1,参数2,参数3......}
在赋值直接用for循环赋值
for(int i=0;i<=param.ength;i++){
pst.setString(i+1,param[i])
}
------解决方案--------------------
探讨

同意#9楼
 SELECT * FROM TABLE_A WHERE A_COLUMN_NAME IN(?, ? ,?, ……)

传参数我建议传送个数组
String [] param={参数1,参数2,参数3......}
在赋值直接用for循环赋值
for(int i=0;i<=param.ength;i++){
pst.setString(i+1,param[i])
}
……

------解决方案--------------------
探讨
引用:

同意#9楼
SELECT * FROM TABLE_A WHERE A_COLUMN_NAME IN(?, ? ,?, ……)

传参数我建议传送个数组
String [] param={参数1,参数2,参数3......}
在赋值直接用for循环赋值
for(int i=0;i<=param.ength;i++){
pst.se……