没有合适的资源?快使用搜索试试~ 我知道了~
首页利用JDBC的PrepareStatement打印真实SQL的方法详解
利用JDBC的PrepareStatement打印真实SQL的方法详解
1星 27 下载量 80 浏览量
更新于2023-03-16
评论
收藏 69KB PDF 举报
PreparedStatement是预编译的,对于批量处理可以大大提高效率. 也叫JDBC存储过程,下面这篇文章主要给大家介绍了关于利用JDBC的PrepareStatement打印真实SQL的方法,需要的朋友可以参考借鉴,下面来一起看看吧。
资源详情
资源评论
资源推荐
利用利用JDBC的的PrepareStatement打印真实打印真实SQL的方法详解的方法详解
PreparedStatement是预编译的,对于批量处理可以大大提高效率. 也叫JDBC存储过程,下面这篇文章主要给大家
介绍了关于利用JDBC的PrepareStatement打印真实SQL的方法,需要的朋友可以参考借鉴,下面来一起看看
吧。
前言前言
本文主要给大家介绍了关于利用JDBC的PrepareStatement打印真实SQL的相关内容,分享出来供大家参考学习,下面来一起
看看详细的介绍:
我们知道,JDBC 的 PrepareStatement 优点多多,通常都是推荐使用 PrepareStatement 而不是其基类 Statment。
PrepareStatement 支持 ? 占位符,可以将参数按照类型转自动换为真实的值。既然这一过程是自动的,封装在 JDBC 内部
的,那么我们外部就不得而知目标的 SQL 最终生成怎么样——于是在调试过程中便有一个打印 SQL 的问题。我们对
PrepareStatement 传入 SQL 语句,如 SELECT * FROM table WHERE id = ?,然后我们传入对应的 id 参数,假设是 id =
10,那怎么把得到参数的 SELECT * FROM table WHERE id = 12 结果完整地得出来呢?——这便是本文所要探讨的问题。
下面话不多说了,来一起看看详细的介绍:
方法如下:方法如下:
首先,我们看看典型的一个 PrepareStatement 调用方法,如下一个函数,
/**
* 查询单个结果,保存为 Map<String, Object> 结构。如果查询不到任何数据返回 null。
*
* @param conn
* 数据库连接对象
* @param sql
* SQL 语句,可以带有 ? 的占位符
* @param params
* 插入到 SQL 中的参数,可单个可多个可不填
* @return Map<String, Object> 结构的结果。如果查询不到任何数据返回 null。
*/
public static Map<String, Object> query(Connection conn, String sql, Object... params) {
Map<String, Object> map = null;
printRealSql(sql, params); // 打印真实 SQL 的函数
try (PreparedStatement ps = conn.prepareStatement(sql);) {
if(params != null)
for (int i = 0; i < params.length; i++)
ps.setObject(i + 1, params[i]);
try (ResultSet rs = ps.executeQuery();) {
if (rs.isBeforeFirst()) {
map = getResultMap(rs);
} else {
LOGGER.info("查询 SQL:{0} 没有符合的记录!", sql);
}
}
} catch (SQLException e) {
LOGGER.warning(e);
}
return map;
}
值得注意该函数里面:
printRealSql(sql, params); // 打印真实 SQL 的函数
其参数一 sql 就是类似 SELECT * FROM table WHERE id = ? 的语句,参数二 params 为 Object... params 的参数列表,可以是任意
类似的合法 SQL 值。最后,通过 printRealSql 函数最终得出形如 SELECT * FROM table WHERE id = 12 的结果。
printRealSql 函数源码如下:
/**
* 在开发过程,SQL语句有可能写错,如果能把运行时出错的 SQL 语句直接打印出来,那对排错非常方便,因为其可以直接拷贝到数据库客户端进行调试。
*
* @param sql
* SQL 语句,可以带有 ? 的占位符
* @param params
* 插入到 SQL 中的参数,可单个可多个可不填
* @return 实际 sql 语句
*/
public static String printRealSql(String sql, Object[] params) {
if(params == null || params.length == 0) {
weixin_38617436
- 粉丝: 12
- 资源: 946
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- zigbee-cluster-library-specification
- JSBSim Reference Manual
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论1