首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

statement跟preparedstatement区别浅析

2012-10-09 
statement和preparedstatement区别浅析?1,public interfaceStatement???????? 用于执行静态 SQL语句并返回

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;

有些数据库是不会让你成功的,但也有很多数据库就可以使这些语句得到执行.

热点排行