1,public interface Statement
用于执行静态 SQL 语句并返回它所生成结果的对象。
public interface PreparedStatement 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+"' and passwd='"+varpasswd+"'";
如果我们把[' or '1' = '1]作为varpasswd传入进来.看看会成为什么?
select * from tb_name = '随意' and passwd = '' or '1' = '1';
因为'1'='1'肯定成立,所以可以任何通过验证.更有甚者:
把[';drop table tb_name;]作为varpasswd传入进来,则:
select * from tb_name = '随意' and passwd = '';drop table tb_name;
有些数据库是不会让你成功的,但也有很多数据库就可以使这些语句得到执行.