JAVA中,用prepareStatement的方式,怎么查看真正执行的SQL?

Aogu_Xt 2008-02-19 01:22:38
我想知道有没有办法查看到prepareStatement方式拼装SQL后,真正我拼装完执行的SQL?

还有,如果我用prepareStatement方式拼装SQL,那么怎么合成带 IN 条件的SQL?

比如:

Select * from tb where tb.a in (?)

这种能实现么?能的话,我应该怎么往里传参数?

请高手指教~~
...全文
745 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
dong5945 2008-02-19
  • 打赏
  • 举报
回复
请问我这里的 ? 应该怎么传?

pst.setString(1, "'01', '02'");

这样么?
---------------------------------------
是这样的
dracularking 2008-02-19
  • 打赏
  • 举报
回复
貌似不能
我debug下ps对象 就查到个originalSQL
也许有其它方式可以拼装
Aogu_Xt 2008-02-19
  • 打赏
  • 举报
回复
不能手动拼SQL,因为SQL是自动生成的。

如果是这样:
Select * from tb where tb.a in (?)

请问我这里的 ? 应该怎么传?

pst.setString(1, "'01', '02'");

这样么?
yuwenbao 2008-02-19
  • 打赏
  • 举报
回复
prepareStatement方式拼装SQL?什么意思,一般做法是字符串拼装完再进行preparedStatement的封装啊
cangbai217 2008-02-19
  • 打赏
  • 举报
回复
public static List findproperty(String canshu1, String canshu2)throws Exception{

StringBuffer hql = new StringBuffer("Select * from tb b where 1=1");

if (canshu1!= null && !"".equals(canshu1))
hql.append(" and b.列名 = " + canshu1);
if (canshu2!= null && !"".equals(canshu2))
hql.append(" and b.列名 = " + canshu2);
PreparedStatement ps = conn.prepareStatement(hql);
dong5945 2008-02-19
  • 打赏
  • 举报
回复

pst = conn.prepareStatement("SQL语句");
pst.setInt(1, id);//第一个问号
pst.setString(2, name);//第二个问号
....
Aogu_Xt 2008-02-19
  • 打赏
  • 举报
回复
由于开发环境的原因,我们只能生成一个SQL文,不能自己动态拼写~~
而我要in 的部分,是别的业务传过来的,所以,不能这样,我只能循环执行了。
Gump09 2008-02-19
  • 打赏
  • 举报
回复
使用in的效率是很差的,可能的话换成几个and 或者 exists
换成exists参考
http://oracle.chinaitlab.com/optimize/14505.html

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧