statement和preparedstatement区别浅析

 

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;

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值