正在开发一个小东西,需要俩个不同的数据库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拼字符串了,不知道各位有啥好办法