JDBC中 PreparedStatement 与 Statement 的比较

PreparedStatement(预编译)与  Statement  的关系:

PreparedStatement继承自Statement,都是接口

PreparedStatement(预编译)与  Statement  的区别:

1、语法不同:

PreparedStatement可以使用预编译的sql,只需要发送一次sql语句,后面只要发送参数即可,公用一个sql语句。

Statement只能使用静态的sql。 

delete from student where id=1;

2、效率不同:PreparedStatement使用了sql缓冲区,可以使用占位符,效率要比Statement高。

3、安全性不同:PreparedStatement可以有效的防止sql注入,而Statement不能防止sql注入。

下面是很长时间之前经常出现的sql注入问题,由于之前使用 Statement接口完成JDBC,Statement是字符串简单的拼接,就会造成sql注入,比如用户登录,创建的`name`字段值为'xxx' OR 1=1 --y' AND  这时候你的密码passw不管输入什么都能登录查询。
CREATE  TABLE  users(
     id  INT  PRIMARY  KEY  AUTO_INCREMENT,
     ` name VARCHAR (10),
     ` password VARCHAR (10)
);
INSERT  INTO  users(` name `, ` password `)  VALUES ( 'lisi' ,123);
SELECT  FROM  users  WHERE  1=1;   -- 1=1   true
SELECT  FROM  users  WHERE  ` name `= 'lisi'  AND  ` password `= '123' ;
--  zhangsan' OR 1=1 -- y 
SELECT  FROM  users  WHERE  ` name `='zhangsan ' OR 1=1 -- y'  AND  ` password `= '343' ;
由于字符串简单的拼接,sql语句的查询条件相当于   WHERE  ` name `='zhangsan ' OR true;后面的成为了注释,严重影响了安全性。
PreparedStatement使用占位符,类似于变量那样一个字段一个字段的赋值,一个萝卜一个坑,有效的解决了sql注入问题,效率也要比Statement高出很多。
下图为我练习JDBC时的一个插入数据测试方法,体现PreparedStatement的一个萝卜一个坑用法(占位符)

 

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值