JDBC:Statement与PreparedStatement的联系与区别

1、联系

二者均是接口interface,其中Statement是PreparedStatement的父接口。用于jdbc的sql执行。

2、区别

二者的区别主要集中在静态与动态、执行过程细节方面。

2.1、静态与动态

Statement用于执行静态 SQL 语句并返回它所生成结果的对象。而PreparedStatement用于执行动态SQL语句并返回它所生成结果的对象,SQL 语句被预编译并存储在 PreparedStatement 对象中,然后可以使用此对象多次高效地执行该语句。

select colume from table where colume=1;//常量、静态

select colume from table where colume=?;//变量、动态

2.2执行细节

Statement为每一条SQL语句生成一个执行计划(每个SQL语句进行一次编译执行),而PreparedStatement通过变量设置的形式,实现了同类SQL语句只生成一个执行计划(同类SQL语句,一次预编译,多次执行),然后每次只需把问号置为相应的值。
这样在执行效率上,单次执行Statement效率高于PreparedStatement,多次重复性执行(批量处理)Statement效率低于PreparedStatement。

Connection con = DriverManager.getConnection(url, user, pwd);
Statement st = con.createStatement();
ResultSet rs = st.executeQuery(“select * from userinfo”);

2.3安全性

传递给PreparedStatement对象的参数可以被强制进行类型转换,使开发人员可以确保在插入或查询数据时与底层的数据库格式匹配。另外PreparedStatement可以防止SQl注入。

Connection con = DriverManager.getConnection(url, user, pwd);
PreparedStatement updateSales=con.prepareStatement(“UPDATE COFFEES SETSALES = ? WHERE COF_NAME LIKE ? “);
updateSales.setInt(1, 75);
updateSales.setString(2, “Colombian”);
updateSales.executeUpdate();

3、参考

jdbc代码
Statement与PreparedStatement

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值