浏览 4627 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-06-30
在库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拼字符串了,不知道各位有啥好办法 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间: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 包的实现 呵呵 不错 谢谢啊~~~~ 是个好方法 思路很清晰,很新颖,呵呵 |
|
返回顶楼 | |