课时15 PreparedStatement与Statement在使用时的区别

PreparedStatement与Statement在使用时的区别

1.Statement

sql
executeUpdate(sql)

2.PreparedStatement

sql(可能存在占位符?)
在创建PreparedStatement对象时,将sql预编译PreparedStatement(sql)
executeUpdate()
setXxx()替换占位符?

推荐使用PreparedStatement:原因如下:

1.编码更加简洁(避免了字符串的拼接)

String name="23";
int age=23;
stmt:
String sql="insert into student(stuno,stuname)values('"+name+"',"+age+")";
pstmt:
String sql="insert into student(stuno,stuname)values(?,?)";
pstmt=connection.prepareStatement(sql);//预编译SQL
pstmt.setString(1,name);
pstmt.setInt(2,age);

2.提高性能(因为有预编译操作,预编译只需执行一次)

需要重复增加100条数
stmt:
String sql="insert into student(stuno,stuname)values('"+name+"','"+age+"')";
stmt.executeUpdate(sql);
pstmt:
String sql="insert into student(stuno,stuname)values(?,?)";
pstmt=connection.prepareStatement(sql);//预编译SQL
pstmt.setString(1,name);
pstmt.setInt(2,age);
for(100){
    pstmt.executeUpdate();
}

3.安全(可以有效防止sql注入)

sql注入:将用户输入的内容和开发人员的SQL语句混为一体
stmt:存在被sql注入的风险
(例如输入  用户名:任意值  'or 1=1 --  
      密码:任意值)
分析:
select count(*) from login where uname='任意值' or 1=1 --' and upwd='任意值';
select count(*) from login where uname='任意值' or 1=1;
select count(*) from login;

select count(*) from login where uname='"+name+"' and upwd='"+pwd+"';
pstmt:防止sql注入

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值