什么是JDBC(二)-Statement和PreparedStatement的区别-详解JDBC系列

Statement和PreparedStatement的区别

概述

1.基于效率和安全性两个方面,再实际开发中,我们一般使用PreparedStatement来替换普通的Statement
2.有些特殊只能使用Statement

PreparedStatement基本用法

1.PrepareStatement支持sql语句问号占位
2.PreparedStatement本质上也是一个"车",多了一个预编译的功能即当创建PreparedStatement对象时立即把SQL语句发送到数据库编译储存

//查询数据
String sql="select * from student limit ?,?";
PreparedStatement pst = con.prepareStatement(sql);
pst.setInt(1,1);//从第二条记录开始查询
pst.setInt(2,5);//最大显示5条记录



//添加数据
String sql="insert into student(name,age,birth,schid) values(?,?,?,?)";
PreparedStatement pst = con.prepareStatement(insert);
//给参数赋值
pst.setString(1,name);
pst.setInt(2,age);
pst.setDate(3,birth);
pst.setInt(4,schid);
pst.executeUpdate();

两者比较

1.效率:PrepareStatement比Statement高,因为前者存在预编译,sql语句已经在数据库里等着了,但是这个差别往往还体现在驱动里,mysql体现不明显,差别比较大的是Oracle
2.安全性:PreparedStatement可以防止SQL注入问题

结论:推荐使用PrepareStatement 但是有些情况只能使用Statement,如👇三种情况之恶能用前者

-例1:
表名也是?占位 
select * from ?
如果传入一个stu则默认匹配字符串 则会生成 select * from 'stu',这是错误的.
-例2:
模糊查询中不能使用 ? 
select * from student
 where name like '%?%' 这种情况?表示?而不是占位符,所以这种时候这能用Statement
-例3:
 order by后边用?
  select * from XXX where xx order by ?
  如果传入?我们传入name 则自动会匹配成 "name"这句话就变成了 select * from XXX where XX order by "name",而我们不需要这个"",所以这种情况我们也只能使用Statement

总结

自己写JDBC连接的话(当然这种情况现在很少了),能用PreparedStatement就不用Statement,说的有错误希望大家指正

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

商朝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值