statement和preparedstatement区别浅析
?
1,public interfaceStatement
???????? 用于执行静态 SQL语句并返回它所生成结果的对象。
?
?? public interfacePreparedStatement extends Statement
?
???????? 表示预编译的 SQL 语句的对象。
???????? SQL 语句被预编译并且存储在 PreparedStatement对象中。
???????? 然后可以使用此对象高效地多次执行该语句。
?
2,代码可读性
stmt.executeUpdate("insert into tb_name (col1,col2,col2,col4)values ('"+var1+"','"+var2+"',"+var3+",'"+var4+"')");//preparedstatement支持参数设置perstmt = con.prepareStatement("insert into tb_name (col1,col2,col2,col4) values (?,?,?,?)");perstmt.setString(1,var1);perstmt.setString(2,var2);perstmt.setString(3,var3);perstmt.setString(4,var4);perstmt.executeUpdate();?
?
3, 极大地提高了安全性----防止SQL注入
String sql = "select * from tb_name "
+"where name= '"+varname+"' andpasswd='"+varpasswd+"'";
如果我们把[' or '1' = '1]作为varpasswd传入进来.看看会成为什么?
select * from tb_name = '随意' andpasswd = '' or '1' = '1';
因为'1'='1'肯定成立,所以可以任何通过验证.更有甚者:
把[';drop table tb_name;]作为varpasswd传入进来,则:
select * from tb_name = '随意' and passwd = '';drop tabletb_name;
有些数据库是不会让你成功的,但也有很多数据库就可以使这些语句得到执行.