A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

在执行sql语句的时候,我们比较常用的就是PreparedStatement,有时也会用到Statement,对于我来说,一直都是使用PreparedStatement。
但是,当我使用Statement的时候也是没有问题的,我就是想知道,PreparedStatement和Statement有什么区别?在什么情况下应该用什么?

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 赞一个!

查看全部评分

3 个回复

倒序浏览
主要有两点
1、preparedStatement的效率要比Statement的效率要高,因为preparedStatement会预编译,会把编译后的语句放入缓存,如果后面有一样的SQL要执行,只要替换参数即可。不像statement每次都得重新生成新的SQL
2、preparedStatement可以防止SQL注入,比如用户在注册的时候填写一句 or "1=1" 如果你用Statement,那么最后的SQL的结构就改变了你原来的SQL了。
如果是preparedStatement,他早就预编译了,他的SQL结构是不会变的了 ,顶多把 or "1=1" 这个整个串作为一个参数传进去。

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 赞一个!

查看全部评分

回复 使用道具 举报
java中的PreparedStatement 接口继承了Statement,并与之在两方面有所不同:、
有人主张,在JDBC应用中,如果你已经是稍有水平开发者,
你就应该始终以PreparedStatement代替Statement.
也就是说,在任何时候都不要使用Statement。
由于 PreparedStatement 对象已预编译过,所以其执行速度要快于 Statement 对象。
因此,多次执行的 SQL 语句经常创建为 PreparedStatement 对象,以提高效率。

作为 Statement 的子类,PreparedStatement 继承了 Statement 的所有功能。
另外它还添加了一整套方法,用于设置发送给数据库以取代 IN 参数占位符的值。
同时,三种方法 execute、 executeQuery 和 executeUpdate 已被更改以使之不再需要参数。
这些方法的 Statement 形式(接受 SQL 语句参数的形式)不应该用于 PreparedStatement 对象。

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马