如何得到 conn.prepareStatement 最终执行的sql 语句

blueice2002 2006-03-01 11:27:18
请教 如何得到 conn.prepareStatement 最终执行的sql 语句。
stmt = con.prepareStatement(sql);
sql="update table1 set a=?,b=?"
stmt.setObjec t(1,"a");
stmt.setObjec t(2,"b");


希望可以通过
stmt或者conn 得到

update table1 set a='a',b='b'
...全文
1255 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
blueice2002 2006-03-06
  • 打赏
  • 举报
回复
private static String getSQL(String targetStr, Object[] sqlValues) {
StringTokenizer token = new StringTokenizer(targetStr, "?", false);
StringBuffer buf = new StringBuffer();
for (int i = 0; i < sqlValues.length; i++) {
buf.append(token.nextToken());
buf.append("'" + sqlValues[i] + "'");
}
return buf.toString();
}
blueice2002 2006-03-03
  • 打赏
  • 举报
回复
谢谢大家,查了jdk,发现PreparedStatement
确实没有提供拼sql功能,由于项目中要求出sql log,再者为调试方便,偶自己写了个方法,凑合能用。改天贴出来共享。
blueice2002 2006-03-03
  • 打赏
  • 举报
回复
谢谢大家,查了jdk,发现PreparedStatement
tsrt 2006-03-02
  • 打赏
  • 举报
回复
不知道你得到这个是干吗,不过如果你是想验证下语句对错与否的话,可以投机取巧嘛,把那些问号换成比如 X1 X2 然后用你SETXXX进去的字符替换他们,打印出来,不就可以了嘛。
bit_koko 2006-03-02
  • 打赏
  • 举报
回复
预编译 用这些setString(..), setInt(...), setDate(...)
就可以拉
stmt = con.prepareStatement(sql);
sql="update table1 set a=?,b=?"
stmt.setString(1,"a");
stmt.setString(2,"b");
dlxu 2006-03-02
  • 打赏
  • 举报
回复
借助第三方工具,在JDBC的驱动做手脚,比如p6spy
低调的小青蛙 2006-03-02
  • 打赏
  • 举报
回复
同意楼上大虾们所说,

PreparedStatement 的作用并不是 "帮你拼凑 SQL" 这个功能,prepare 之后,要对数据库进行的操作被优化了,底层并不是以一个 sql 语句提交给数据库的。因此,这个语句应该是得不到的,或者说不存在这个语句。
  • 打赏
  • 举报
回复
测试的时候通常用string来写的,如果调不通就out.println一下看看有没有问题
xiaobaolove 2006-03-02
  • 打赏
  • 举报
回复
up
  • 打赏
  • 举报
回复
可用setString(..), setInt(...), setDate(...) ....
doway 2006-03-01
  • 打赏
  • 举报
回复
最终执行的语句就是 "update table1 set a=?,b=?"。

这个语句被编译成二进制代码,这段二进制代码接受两个参数。楼主想想,怎么会有最终的执行语句呢,若是有的话,PreparedStatment 和 Statment 还有什么不同呢?

但办法还是有的,只是太老实了一些:

String sqlForLogAndDebug = ="update table1 set a="+ ... + ",b="+ ...;

老实不好吗?:)
寂寞沙洲 2006-03-01
  • 打赏
  • 举报
回复
恐怕不行,如果要看到sql语句,还是用拼接的方法吧。
crazycy 2006-03-01
  • 打赏
  • 举报
回复
conn.prepareStatement(..)本身不可能得到拼装后的sql语句

但是也不是没有办法解决的,那就是把PreparedStatement类继承并扩展一下,增加你需要的功能
blueice2002 2006-03-01
  • 打赏
  • 举报
回复
要得到sql
1.调试sql 语句
2.写sql log。
zx2002027 2006-03-01
  • 打赏
  • 举报
回复
sql="update table1 set a='a',b='b'"
believefym 2006-03-01
  • 打赏
  • 举报
回复
有String sql的,干吗还要通过stmt、conn得到
treeroot 2006-03-01
  • 打赏
  • 举报
回复
有必要么
TinyJimmy 2006-03-01
  • 打赏
  • 举报
回复
可用setString(..), setInt(...), setDate(...) ....
livelivelive 2006-03-01
  • 打赏
  • 举报
回复
没有相应的方法。
RainRainbow 2006-03-01
  • 打赏
  • 举报
回复
应该得不到吧,object是字符串可以直接写成set a='a',b='b',如果是别的类型的怎么写?

62,615

社区成员

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

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