sql文如下: SELECT SAD_MTSMR_DT_WK.SHOHN_NM, SAD_MTSMR_DT_WK.BUZAI_QTY FROM SAD_MTSMR_DT_WK WHERE SAD_MTSMR_DT_WK.MTSMR_NO = '0000000015' AND SAD_MTSMR_DT_WK.MTSMR_MEI_NO = '1' AND SAD_MTSMR_DT_WK.HMBI_HNMK_SHBTS_CD IN (?)不管SAD_MTSMR_DT_WK.HMBI_HNMK_SHBTS_CD是number类型的还是varchar类型的,使用preparedStatement的时候,都无法添加多个参数,pstmt.setStrin(1, "'1','2','3','23'");都不能查出数据,但是直接运行sql是可以查出数据的。 不能使用多个问号,因为参数?是通过list里的值多少来决定个数的。是不是preparedStatement不支持?可以替换成多个参数的情况。
select * from tablename where col1 in (?);如果:setString(1, "'1','2','3','23'"); 那么:select * from tablename where col1 in ("'1','2','3','23'"); 括号里只有一个参数, 和 select * from tablename where col1 in ('1','2','3','23'); 是不同的。
如果 col1 的类型是 number 正确的 sql 应该是 select * from tablename where col1 in (1,2,3,23); 也不应该是select * from tablename where col1 in ('1','2','3','23');
回trumplet(检查)我知道String类型的sql为: select * from tablename where col1 in ('1','2','3','23'); number的sql为:select * from tablename where col1 in (1,2,3,23); 按照你说的是不是没有办法把in ('1','2','3','23'); 变成in (?)的方式,也就是说我最想知道的问题答案是:[技术上]preparedStatement不支持?可以替换成多个参数的情况。是这个意思吗?
pstmt.setStrin(1, "1");
pstmt.setStrin(2, "2");
..........
SELECT
SAD_MTSMR_DT_WK.SHOHN_NM,
SAD_MTSMR_DT_WK.BUZAI_QTY
FROM
SAD_MTSMR_DT_WK
WHERE
SAD_MTSMR_DT_WK.MTSMR_NO = '0000000015'
AND SAD_MTSMR_DT_WK.MTSMR_MEI_NO = '1'
AND SAD_MTSMR_DT_WK.HMBI_HNMK_SHBTS_CD IN (?)不管SAD_MTSMR_DT_WK.HMBI_HNMK_SHBTS_CD是number类型的还是varchar类型的,使用preparedStatement的时候,都无法添加多个参数,pstmt.setStrin(1, "'1','2','3','23'");都不能查出数据,但是直接运行sql是可以查出数据的。
不能使用多个问号,因为参数?是通过list里的值多少来决定个数的。是不是preparedStatement不支持?可以替换成多个参数的情况。
String = "?,?,?,?,?,?,?,?,?,?,?,?,?,";//可能的最大值
sql += .substring(o,list.size()*2-1);
sql += ")";
Iterator iterator = list.iterator();
int i = 0;
while(iterator.hasnext){
pstmt.setString(++i, (String)iterator.next());
}
这不就可以了吗?
但是,我并不是想去解决现在的这个问题,因为实际中我用自己组装sql的方法,已经绕过了这个问号是多个参数的情况。现在我想问的是[技术上]是不是preparedStatement不支持?可以替换成多个参数的情况。因为我测试过的情况是,不管这个?是String的还是number型的,都不支持pstmt.setString(1, "'1','2','3','23'");的情况(程序不出错,但是执行结果不是我预期的,没有数据)。
不知道大家试验后,是不是也不行?希望我的问题表达清楚了。挥汗~~~~~
那么:select * from tablename where col1 in ("'1','2','3','23'");
括号里只有一个参数,
和 select * from tablename where col1 in ('1','2','3','23'); 是不同的。
正确的 sql 应该是 select * from tablename where col1 in (1,2,3,23); 也不应该是select * from tablename where col1 in ('1','2','3','23');
select * from tablename where col1 in ('1','2','3','23'); number的sql为:select * from tablename where col1 in (1,2,3,23); 按照你说的是不是没有办法把in ('1','2','3','23'); 变成in (?)的方式,也就是说我最想知道的问题答案是:[技术上]preparedStatement不支持?可以替换成多个参数的情况。是这个意思吗?