本文主要是介绍什么是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 studentwhere 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,说的有错误希望大家指正
这篇关于什么是JDBC(二)-Statement和PreparedStatement的区别-详解JDBC系列的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!