PrepareStatement中的sql语句中的in查询问题

正在开发一个小东西,需要俩个不同的数据库DB_A和DB_B(不同的实例),都是Oracle的
在库DB_A中的一个表A根据条件查出主键有1,2,3,4,5,6
拼好后为"1,2,3,4,5,6"

再在第二个库DB_B中的B表中把上面拼的字符串作为in的参数,如下

String in_data="1,2,3,4,5,6";
pst =
conn.prepareStatement("select id,name from B where id in ? ");
pst.setString(1,"("+in_data+")");


发现查不出记录,我又试

String in_data="1,2,3,4,5,6";
pst =
conn.prepareStatement("select id,name from B where id in ( ? )");
pst.setString(1,in_data);


还是不出记录,我再试

String in_data="1";
pst =
conn.prepareStatement("select id,name from B where id in ( ? )");
pst.setString(1,in_data);


终于出来了id=1的记录,似乎明白了点啥么
PrepareStatement是动态设定参数的,
也就是现在生成select id,name from B where id in ( ? )
一个?代表一个参数,pst.setString(1,"1,2,3,4,5,6"),
就相当于select id,name from B where id in ( '1,2,3,4,5,6' ),
没有id为'1,2,3,4,5,6'的记录,当然查不出来啦

但是由于我的in_data是根据条件动态改变的,由于俩查询在不同的DB实例中,所以用子查询是不行的;而用PrepareStatement设置in参数的时候就不能确定到底是用几个"?"

最后只好用Statement拼字符串了,不知道各位有啥好办法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值