一天一个java知识(preparedStatement和Statement的区别)
老早之前用servlet开发时,就遇到过preparedStatement和Statement当时还傻傻分不清楚,问学长这两个是什么,有什么区别,当时学长就回答了一句咱们用preparedStatement,不用后者,后者太古老,今天重新温习一下:
1,首先是效率:预编译会话比普通会话对象,数据库系统不会对相同的sql语句不会再次编译,preparedStatement是经过预编译的,也叫JDBC存储过程
2,再是安全性:preparedStatement可以有效的避免sql注入攻击!sql注入攻击就是从客户端输入一些非法的特殊字符,而使服务器端在构造sql语句的时候仍然能够正确构造,从而收集程序和服务器的信息和数据。
比如:“select * from t_user where userName = ‘” + userName + “ ’ and password =’” + password + “’”
如果用户名和密码输入的是’1’ or ‘1’=’1’ ; 则生产的sql语句是:
“select * from t_user where userName = ‘1’ or ‘1’ =’1’ and password =’1’ or ‘1’=’1’ 这个语句中的where 部分没有起到对数据筛选的作用。
3,选择使用
在对数据库只执行一次性存取的时侯,用 Statement 对象进行处理。PreparedStatement对象的开销比Statement大,对于一次性操作并不会带来额外的好处。
4,prepareStatement可以替换变量
在SQL语句中可以包含?,可以用
ps=conn.prepareStatement("select* from article where title=?");
int title="123";
ps.setInt(1, title);
rs = ps.executeQuery();
可以把?替换成变量。
而Statement只能用
int title="123";
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select * from article where totle="+title);
5,prepareStatement会先初始化SQL,先把这个SQL提交到数据库中进行预处理,多次使用可提高效率。
createStatement不会初始化,没有预处理,没次都是从0开始执行SQL
下一篇: Vim 复制粘贴探秘
推荐阅读
-
JDBC中的Statement和PreparedStatement的区别
-
JDBC中Statement和PreparedStatement的区别
-
JDBC与Statement和PreparedStatement的区别
-
一天一个java知识(preparedStatement和Statement的区别)
-
JDBC中Statement和 PreparedStatement的区别
-
一天一个面试题之——Java 静态变量和成员变量的区别
-
浅谈Java等软件和嵌入式的区别,给你明确一个方向 嵌入式Java单片机电路c语言
-
JavaScript 和 Java 的区别浅析_基础知识
-
JDBC中的Statement和PreparedStatement的区别
-
JavaScript 和 Java 的区别浅析_基础知识