浏览 491 次
|
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
最后更新时间:2008-06-30
正在开发一个小东西,需要俩个不同的数据库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拼字符串了,不知道各位有啥好办法 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
最后更新时间:2008-06-30
给个提示
String[] in_datas=new String[]{"1", "2", "3"};
String inString=""
for(int i=0;i<in_datas.length;i++){
if(i>0){
inString+=", ";
}
inString+="?";
}
pst =
conn.prepareStatement("select id,name from B where id in ( "+inString+" )");
for(int i=0;i<in_datas.length;i++){
pst.set(i, in_datas[i]);
}
可以参考 org.hibernate.criterion 包的实现 |
|
| 返回顶楼 | |
|
最后更新时间:2008-06-30
嘿嘿,in是有个数限制滴,要注意
|
|
| 返回顶楼 | |
|
最后更新时间:2008-06-30
coldsky 写道 给个提示
String[] in_datas=new String[]{"1", "2", "3"};
String inString=""
for(int i=0;i<in_datas.length;i++){
if(i>0){
inString+=", ";
}
inString+="?";
}
pst =
conn.prepareStatement("select id,name from B where id in ( "+inString+" )");
for(int i=0;i<in_datas.length;i++){
pst.set(i, in_datas[i]);
}
可以参考 org.hibernate.criterion 包的实现 呵呵 不错 谢谢啊~~~~ 是个好方法 |
|
| 返回顶楼 | |
|
最后更新时间:2008-07-31
llm6101 写道 coldsky 写道 给个提示
String[] in_datas=new String[]{"1", "2", "3"};
String inString=""
for(int i=0;i<in_datas.length;i++){
if(i>0){
inString+=", ";
}
inString+="?";
}
pst =
conn.prepareStatement("select id,name from B where id in ( "+inString+" )");
for(int i=0;i<in_datas.length;i++){
pst.set(i, in_datas[i]);
}
可以参考 org.hibernate.criterion 包的实现 呵呵 不错 谢谢啊~~~~ 是个好方法 思路很清晰,很新颖,呵呵 |
|
| 返回顶楼 | |



