大家好,这里是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的执行过程,大致是这样的:
- SQL请求首先被发送到连接管理器,这里会涉及到权限验证;
- 查询缓存,如果命中 则直接返回结果
- 语法分析器,生成一个解析树
- 优化器,生成一个执行计划
- 根据执行计划来执行SQL操作
使用prepareStatement方式会有两个好处:
- 会提前生成执行计划,可以避免上述步骤1~4的重复操作,这样可以提高效率;
- 安全性好,可以防止SQL注入;这种方式会为用户参数留下占位符,执行计划是提前生成的,所以不会因为参数而改变执行计划;而直接提交SQL,执行计划会受到用户参数的影响,会有SQL注入风险。
感谢浏览阅读,如果觉得内容有价值欢迎点赞,转发;喜欢请关注“IT技术百货”