Statement、PreparedStatement、CallableStatement有什么区别?三者区别的详情介绍

发布时间:   来源:CSDN  

JDBC:

Statement(接口)      | PreparedStatement(接口)      | CallableStatement(接口) 以上三者为继承关系。

一、Statement


(资料图片仅供参考)

用于执行不带参数的简单SQL语句,每次执行SQL语句,数据库都要执行SQL语句的编译,最好用于仅执行一次查询并返回结果情形,效率高于PreparedStatement

stmt=con.createStatement();            stmt.execute("insert into employee values(1,"jim1",25)");rs=stmt.executeQuery("select * from employee");while(rs.next()){System.out.println(rs.getInt(1)+" "+rs.getString(2)+" "+rs.getInt(3));}

二、PreparedStatement:预编译的SQL语句的对象

执行的SQL语句中是可以带参数的,并支持批量执行SQL。

由于采用cache机制,则预先编译的语句,就会放在cache中,下次执行相同SQL语句,则直接从cache中取出来

con=DriverManager.getConnection(url,user,password);pstmt=con.prepareStatement("update employee set age=? where id=?");pstmt.setInt(1, 30);pstmt.setInt(2, 3);pstmt.executeUpdate();

三、CallableStatement

提供了用来调用数据库中存储过程的接口,如果有输出参数要注册,说明是输出参数

四、PreparedStatement与Statement区别

①代码可读性和可维护性更好

int id=4;String name="jim4";int age=24;stmt.execute("insert into employee values(""+id+"",""+name+"",""+age+"")");

②安全性更好

在SQL中有万能钥匙"OR 1="1,在Statement中是将参数直接放入SQL语句中连接到一起执行

String name="jim4 "OR 1="1";rs=stmt.executeQuery("select * from employee where name=""+name+""");

在PreparedStatement中,是将jim4 "OR 1="1作为一个字符串赋值给?,作为name字段对应的值,显然这样注入就无从谈起了

③效率更高

每一种数据库都会尽最大努力对预编译语句提供最大的性能优化,因为预编译语句有可能会被重复调用。当下次调用时无需编译,只要将参数直接传入编译过的语句执行代码中就会执行。

相关文章Related

返回栏目>>

关于我们 | 联系我们 | 投稿合作 | 法律声明 | 广告投放

版权所有©2017-2020   太阳信息网京ICP备2021034106号-55

所载文章、数据仅供参考,使用前务请仔细阅读网站声明。本站不作任何非法律允许范围内服务!

联系我们:55 16 53 8 @qq.com