小知识点:为什么数据库操作尽量选择prepareStatement

大家好,这里是IT技术百货,专注于有价值的IT技术知识分享;

今天跟大家分享Java类加载的相关内容

问题描述

以java语言为例来讲,在访问数据库的时候有两种提交SQL的方式,一种是通过statement直接提交SQL,另一种是先通过prepareStatement预编译SQL,然后设置可变参数再提交;

具体写法如下:

<code>statement.executeUpdate("

UPDATE

Users

SET

stateus =

2

WHERE

userID=

233

");

/<code>
<code>PreparedStatement updateUser = con.prepareStatement("

UPDATE

Users

SET

stateus = ?

WHERE

userID = ?

"); updateUser.setInt(1, 2); updateUser.setInt(2,233); updateUser.executeUpdate();

/<code>

通常来讲更建议使用第二种方式,很多ORM框架也都是通过第二种方式来实现的;那么这是为什么呢?

解答

首先要明白一条SQL的执行过程,大致是这样的:

  1. SQL请求首先被发送到连接管理器,这里会涉及到权限验证;
  2. 查询缓存,如果命中 则直接返回结果
  3. 语法分析器,生成一个解析树
  4. 优化器,生成一个执行计划
  5. 根据执行计划来执行SQL操作

使用prepareStatement方式会有两个好处:

  1. 会提前生成执行计划,可以避免上述步骤1~4的重复操作,这样可以提高效率;
  2. 安全性好,可以防止SQL注入;这种方式会为用户参数留下占位符,执行计划是提前生成的,所以不会因为参数而改变执行计划;而直接提交SQL,执行计划会受到用户参数的影响,会有SQL注入风险。

感谢浏览阅读,如果觉得内容有价值欢迎点赞,转发;喜欢请关注“IT技术百货”


分享到:


相關文章: