黑马程序员技术交流社区

标题: 一个关于jdbc的PreparedStatement和Statement的问题 [打印本页]

作者: 而今从头越2012    时间: 2013-1-2 12:54
标题: 一个关于jdbc的PreparedStatement和Statement的问题
在执行sql语句的时候,我们比较常用的就是PreparedStatement,有时也会用到Statement,对于我来说,一直都是使用PreparedStatement。
但是,当我使用Statement的时候也是没有问题的,我就是想知道,PreparedStatement和Statement有什么区别?在什么情况下应该用什么?
作者: 张森    时间: 2013-1-2 13:06
主要有两点
1、preparedStatement的效率要比Statement的效率要高,因为preparedStatement会预编译,会把编译后的语句放入缓存,如果后面有一样的SQL要执行,只要替换参数即可。不像statement每次都得重新生成新的SQL
2、preparedStatement可以防止SQL注入,比如用户在注册的时候填写一句 or "1=1" 如果你用Statement,那么最后的SQL的结构就改变了你原来的SQL了。
如果是preparedStatement,他早就预编译了,他的SQL结构是不会变的了 ,顶多把 or "1=1" 这个整个串作为一个参数传进去。
作者: 刘文超    时间: 2013-1-3 21:56
java中的PreparedStatement 接口继承了Statement,并与之在两方面有所不同:、
有人主张,在JDBC应用中,如果你已经是稍有水平开发者,
你就应该始终以PreparedStatement代替Statement.
也就是说,在任何时候都不要使用Statement。
由于 PreparedStatement 对象已预编译过,所以其执行速度要快于 Statement 对象。
因此,多次执行的 SQL 语句经常创建为 PreparedStatement 对象,以提高效率。

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





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2