社区
Java SE
帖子详情
如何得到 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'
...全文
1297
20
打赏
收藏
如何得到 conn.prepareStatement 最终执行的sql 语句
请教 如何得到 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'
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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 语句提交给数据库的。因此,这个语句应该是得不到的,或者说不存在这个语句。
十分钟年华老去
2006-03-02
打赏
举报
回复
测试的时候通常用string来写的,如果调不通就out.println一下看看有没有问题
xiaobaolove
2006-03-02
打赏
举报
回复
up
如果这都不算爱
2006-03-01
打赏
举报
回复
可用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',如果是别的类型的怎么写?
关于pre
pa
re
Statement
可以防止
SQL
注入的理解
本文介绍了pre
pa
re
Statement
在提高
SQL
执行
效率及防止
SQL
注入方面的作用。通过预处理
SQL
语句
,不仅能够提升
执行
相同
SQL
语句
时的性能,还能有效避免因参数中的特殊字符导致的安全风险。
Pre
pa
re
Statement
概述
博客介绍了Pre
pa
re
Statement
相关内容。指出
Statement
执行
是拼接
SQL
语句
,存在安全问题。而Pre
pa
re
Statement
会预先处理给定
SQL
语句
并进行语法检查,使用?占位符替代后续变量,变量值会被视为字符串,不会产生关键字。
pre
pa
re
Statement
执行
sql
语句
报错空指针异常
本文介绍了一种解决使用
conn
.pre
pa
re
Statement
执行
SQL
语句
时出现空指针异常的方法。问题的根源在于数据库的jar包未被正确导入。通过正确配置数据库连接所需的jar包,可以有效地避免此类异常。
pre
pa
restatment获取
sql
_总是报ps=
conn
.pre
pa
re
Statement
(
sql
);为空,怎么回事
在使用Java JDBC进行数据库操作时,遇到一个问题:尝试创建Pre
pa
red
Statement
时返回为空。代码显示已成功连接到数据库,但在
执行
`ps=
conn
.pre
pa
re
Statement
(
sql
);`这行时出现问题。检查发现是缺少了设置
SQL
参数的步骤。解决方案是确保在调用`pre
pa
re
Statement
`方法后正确设置
SQL
参数,例如`ps.setString(1, hotel.getHotelstar());`并确保所有对象非null。 101848214,8004123,GPU体积云实时渲染实践与优化,['GPU Pro', '图形编程', '实时图形', '体积渲染', '抗锯齿技术']
pre
pa
restatment获取
sql
_JDBC-预防
SQL
注入-预处理对象Pre
pa
re
Statement
本文介绍了Java JDBC中的Pre
pa
re
Statement
接口,它用于预编译
SQL
语句
,提高
执行
效率并防止
SQL
注入。通过占位符`?`设置参数,确保安全性。文章展示了使用Pre
pa
re
Statement
实现登录功能的代码示例,并解释了其
执行
原理和与
Statement
的区别。
Java SE
62,622
社区成员
307,257
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章