Statement和PreparedStatement之间的区别
2016-09-26 · 知道合伙人教育行家
Statement:
Statement 是 Java 执行数据库操作的一个重要接口,用于在已经建立数据库连接的基础上,向数据库发送要执行的SQL语句。Statement对象,用于执行不带参数的简单SQL语句。
PreparedStatement:
java,servlet中的PreparedStatement 接口继承了Statement,并与之在两方面有所不同:有人主张,在JDBC应用中,如果已经是稍有水平的开发者,就应该始终以PreparedStatement代替Statement. 也就是说,在任何时候都不要使用Statement。
如何选择使用:
1. 选择PreparedStatement还是Statement取决于要怎么使用它们。对于只执行一次的SQL语句选择Statement是最好的.相反,如果SQL语句被多次执行PreparedStatement是最好的。
2. PreparedStatement: 数据库会对sql语句进行预编译,下次执行相同的sql语句时,数据库端不会再进行预编译了,而直接用数据库的缓冲区,提高数据访问的效率(但尽量采用使用?号的方式传递参数),如果sql语句只执行一次,以后不再复用。
3. 从安全性上来看,PreparedStatement是通过?来传递参数的,避免了拼sql而出现sql注入的问题,所以安全性较好。在开发中,推荐使用 PreparedStatement。
2016-06-28 · 让好习惯成为家庭快乐的源泉
SQL 注入是这样的:
select 1 from users where username='" + name + "' and passwd='" + password + "'";
那么入侵者可以在网页上填 上用户名和密码凑出:
name= " ' or 1 = 1' "
password = " ' or 1 = 1 ' "
这样你把这两个变量替换到字符串之后完整的 SQL 变成了:
select 1 from users where username = '' or 1 = 1 and password = '' or 1 =1;
这里面应该最后 一个 1 = 1 是成立的,所以入侵者不知道用户名和密码也成功登录到网站了。