在jdbc中 Statement 的几个方法有什么区别

作者&投稿:戎闻 (若有异议请与网页底部的电邮联系)
JDBC中的Statement和PreparedStatement的区别~

1、 PreparedStatement接口继承Statement, PreparedStatement 实例包含已编译的 SQL 语句,所以其执行速度要快于 Statement 对象。2、作为 Statement 的子类,PreparedStatement 继承了 Statement 的所有功能。三种方法
execute、 executeQuery 和 executeUpdate 已被更改以使之不再需要参数

3、在JDBC应用中,如果你已经是稍有水平开发者,你就应该始终以PreparedStatement代替
Statement.也就是说,在任何时候都不要使用Statement.
基于以下的原因:
一.代码的可读性和可维护性.
虽然用PreparedStatement来代替Statement会使代码多出几行,但这样的代码无论从可读性还是可维护性上来说.都比直接用Statement的代码高很多档次:
stmt.executeUpdate("insert into tb_name (col1,col2,col2,col4) values ('"+var1+"','"+var2+"',"+var3+",'"+var4+"')");//stmt是Statement对象实例

perstmt = con.prepareStatement("insert into tb_name (col1,col2,col2,col4) values (?,?,?,?)");
perstmt.setString(1,var1);
perstmt.setString(2,var2);
perstmt.setString(3,var3);
perstmt.setString(4,var4);
perstmt.executeUpdate(); //prestmt是 PreparedStatement 对象实例

不用我多说,对于第一种方法.别说其他人去读你的代码,就是你自己过一段时间再去读,都会觉得伤心.

二.PreparedStatement尽最大可能提高性能.
语句在被DB的编译器编译后的执行代码被缓存下来,那么下次调用时只要是相同的预编译语句就不需要编译,只要将参数直接传入编译过的语句执行代码中(相当于一个涵数)就会得到执行.这并不是说只有一个Connection中多次执行的预编译语句被缓存,而是对于整个DB中,只要预编译的语句语法和缓存中匹配.那么在任何时候就可以不需要再次编译而可以直接执行.而statement的语句中,即使是相同一操作,而由于每次操作的数据不同所以使整个语句相匹配的机会极小,几乎不太可能匹配.比如:
insert into tb_name (col1,col2) values ('11','22');
insert into tb_name (col1,col2) values ('11','23');
即使是相同操作但因为数据内容不一样,所以整个个语句本身不能匹配,没有缓存语句的意义.事实是没有数据库会对普通语句编译后的执行代码缓存.

当然并不是所以预编译语句都一定会被缓存,数据库本身会用一种策略,比如使用频度等因素来决定什么时候不再缓存已有的预编译结果.以保存有更多的空间存储新的预编译语句.

1、Statement对象用于执行不带参数的简单SQL语句。2、Prepared Statement 对象用于执行预编译SQL语句。3、Callable Statement对象用于执行对存储过程的调用。

prepareStatement是Connection类的一个方法,作用是对sql语句进行预处理,发到数据库等待执行,该方法执行完之后会返回一个prreparedStatement对象,可以通过它设置sql中带有占位符的值,执行预处理sql语句等操作

没什么事是百度解决不了的


安源区15964456687: JDBC中三大执行SQL命令的Statement对象 -
督祁甘草: 简介: 1、Statement 2、PreparedStatement 3、CallableStetement CallableStatement 对象为所有的 DBMS 提供了一种以标准形式调用已储存过程的方法.已储存过程储存在数据库中.对已储存过程的调用是 CallableStatement 对象所含的内容...

安源区15964456687: 简述JDBC中三种Statement对象的作用
督祁甘草: 来自java api用于执行静态 SQL 语句并返回它所生成结果的对象. 在默认情况下,同一时间每个 Statement 对象在只能打开一个 ResultSet 对象.因此,如果读取一个 ResultSet 对象与读取另一个交叉,则这两个对象必须是由不同的 Statement 对象生成的.如果存在某个语句的打开的当前 ResultSet 对象,则 Statement 接口中的所有执行方法都会隐式关闭它

安源区15964456687: JDBC中Statement和PrepareStatement的区别及特性 -
督祁甘草: 主要区别:Statement执行一条sql就得编译一次,PrepareStatement只编译一次;常用后者原因在于参数设置非常方便;执行一条sql就得编译一次,后者只编译一次;还有就是sql放置的位置不同; 常用后者原因在于参数设置非常方便. jdbc的...

安源区15964456687: 在jdbc中 Statement 的几个方法有什么区别 -
督祁甘草: prepareStatement是Connection类的一个方法,作用是对sql语句进行预处理,发到数据库等待执行,该方法执行完之后会返回一个prreparedStatement对象,可以通过它设置sql中带有占位符的值,执行预处理sql语句等操作

安源区15964456687: 请问下在jdbc中?请问下在jdbc中,Statement的几个
督祁甘草: 我一本正经地胡说一下吧. 在这种情况下,判断null真正含义的唯一方法是调用方法getUpdateCount,它将返回一个整数

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网