`

Statement和PreparedStatement之间的区别

 
阅读更多

1>PreparedStatement是预编译的,对于批量处理可以大大提高效率,也叫JDBC存储过程.

2>使用Statement对象

在对数据库只执行一次性存取的时候,用Statement对象进行处理.PreparedStatement对象的开销比Statement大,对于一次性操作并不会带来额外的好处。

3>Statement每次执行SQL语句,相关数据库都要执行SQL语句的编译,Preparedstatement是预编译得,Preparedstatement支持批处理.

4>

Code Fragment 1:


String updateString = "UPDATE COFFEES SET SALES = 75 " + "WHERE COF_NAME LIKE ′Colombian′";
stmt.executeUpdate(updateString);

Code Fragment 2:

PreparedStatement updateSales = con.prepareStatement("UPDATE COFFEES SET SALES = ? WHERE COF_NAME LIKE ? ");
updateSales.setInt(1, 75);
updateSales.setString(2, "Colombian");
updateSales.executeUpdate();

理解:片端2和片端1的区别在于,后者使用了PreparedStatement对象,而前者是普通的Statemenet对象.PreparedStatement对象不仅包含SQL语句,而且大多数情况下这个语句已经被预编译过,因而当其执行时,只需DBMS运行SQL语句,而不必先编译.当你需要执行Statement对象多次的时候,PreparedStatement对象将会大大降低运行时间,当然也加快了访问数据库的速度.

这种转换也会给你带来很大的便利,不必重复SQL语句的句法,而只需更改其中变量,便可重新执行SQL语句.选择PreparedStatement对象与否,在于相同句法的SQL语句是否执行了多次,而且两次之间的差别仅仅是变量的不同,如果执行了一次的话,它应该和普通的对象毫无差别,体现不出它预编译的优越性.

5>执行许多SQL语句的JDBC程序产生大量的Statement和PreparedStatement对象,通常认为iPreparedStatement对象比Statement对象更有效,特别是如果带有不同参数的同一SQL语句被多次执行的时候,PreparedStatement对象允许数据库预编译SQL语句,这样在随后的允许中可以节省时间并增加代码的可读性。

然而,在Oracle环境中,开发人员实际上有更大的灵活性。当使用Statement或PreparedStatement对象时,Oracle数据库会缓存SQL语句以便以后使用.在一些情况下,由于驱动器自身需要额外的处理和在java应用程序和Oracle服务器间增加的网络活动,执行PreparedStatement对象实际上会花更长的时间!

在处理公共Web站点上的用户传来的数据的时候,安全性的问题就变得极为重要.传递给PreparedStatement的字符串参数会自动被驱动器忽略。最简单的情况下,这就意味着当你的程序试着将字符串"D'Angelo"插入到varchar2中时,该语句不会识别第一个",",从而导致悲惨的失败。几乎很少有必要创建你自己的字符串忽略代码.

在Web环境中,有恶意的用户会利用那些设计不完善的,不能正确处理字符串的应用程序。特别是在公共Web站点上.在没有首先通过PreparedStatement对象处理的情况下,所有的用户输入都不应该传递给SQL语句.此外,在用户有机会修改SQL语句的地方,如HTML的隐藏域或一个查询字符串上,SQL语句都不应该被显示出来.

在执行SQL命令时,我们有二种选择:可以使用PreparedStatement对象,也可以使用Statement对象.无论多少次使用同一个SQL在执行SQL命令时,PreparedStatement都只对它解析和编译一次.当使用Statement对象时,每次执行一个SQL命令时,都会对它进行解析和编译.

第一:

PrepareStatement可以替换变量

在SQL语句中可以包含?,可以用ps=con.prepareStatement("select * from cust where id=?"):

int sid=1001;

ps.setInt(1,sid);

可以把? 替换成变量吧

而Statement只能用

int sid=1001;

Statement stmt = conn.createStatement();

ResultSet rs = stmt.executeQuery("select * from Cust where ID="+sid);
来实现。

第二:

prepareStatement会先初始化SQL,先把这个SQL提交到数据库中进行预处理,多次使用可提高效率.

createStatement不会初始化,没有预处理,没次都是从0开始执行SQL


原文地址:http://wuhaidong.iteye.com/blog/766659

分享到:
评论

相关推荐

    java中PreparedStatement和Statement的区别

    Java 中的 PreparedStatement 和 Statement 都是用于执行 SQL 语句的接口,但是它们之间存在一些关键的区别。 首先,从数据库执行 SQL 语句的角度来看,使用 PreparedStatement 语句可以提高数据库访问的效率。这是...

    prepareStatement和Statement的区别

    prepareStatement和Statement是 Java 中两个常用的数据库操作接口,它们都可以用来执行 SQL 语句,但是它们之间有着明显的区别。 首先,从创建时的区别开始,Statement 需要通过 Connection 对象的 createStatement...

    JDBC中PreparedStatement接口提供的execute、executeQuery和executeUpdate之间的区别及用法

    JDBC 中 PreparedStatement 接口提供的 execute、executeQuery 和 executeUpdate 之间的区别及用法 JDBC 中的 PreparedStatement 接口提供了三种执行 SQL 语句的方法:executeQuery、executeUpdate 和 execute。...

    最全面Java面试题,从corejava到javaWeb共180多题(含答案)

    最全面Java面试题,从core...Statement 和PreparedStatement 之间的区别?120、JDBC,Hibernate 分页怎样实现?【中等难度】131、get 和post 的区别?【基础】177、请写出spring 中I0C 的三种实现机制。【中等难度】

    jdbc实例教程

    JDBC 类地图是 JDBC 的核心组件之一,提供了 JDBC 的类继承关系和类之间的关系。通过类地图,我们可以更好地理解 JDBC 的架构和实现机制。 数据库操作 数据库操作是 JDBC 的核心功能之一,包括插入数据、修改数据...

    java面试题大全--java基础,struts,spring,ejb等

    9.Java中访问数据库的步骤,Statement和PreparedStatement之间的区别。 10.找出下列代码可能存在的错误,并说明原因: 二、JSP&Servlet技术 1.描述JSP和Servlet的区别、共同点、各自应用的范围 2.在Web开发中需要...

    Java 面试题 word文档

    9. Java 中访问数据库的步骤,Statement 和 PreparedStatement 之间的区别。 - 使用 JDBC 访问数据库的步骤包括:加载驱动、建立连接、创建语句、执行语句、关闭连接。 - Statement 和 PreparedStatement 的区别...

    一篇搞定JDBC【Mysql基础】

    演示只能使用Statement对象不能使用PreparedStatement的业务需求用户输入sql语句8.JDBC事务控制三段重要代码应用于数据库用户之间的转账9.悲观锁和乐观锁机制举栗子说明 1.JDBC Java Database Connectivity(java语言...

    jdbc连接各数据库及事务处理

    jdbc连接各数据库及事务处理

    JAVA面试资料大全-整理.zip

    2、 JDBC 中的 PreparedStatement 相比 Statement 的好处? 3、 Java 中实现多态的机制是什么? 4、 说出 ArrayList,Vector, LinkedList 的存储性能和特性 5、 Collection 和 Collections 的区别。 6、HashMap 和 ...

    JDBC笔记 JDBC笔记

    从本质上来说就是调用者(程序员)和实现者(数据库厂商)之间的协议。JDBC的实现由数据库厂商以驱动程序的形式提供。JDBC API 使得开发人员可以使用纯Java的方式来连接数据库,并进行操作。 ODBC:基于C语言的...

    java面试题

    int和Integer有什么区别? 答:int是java的原始数据类型,Integer是java为int提供的封装类,java为每个原始数据类型都提供了封装类。 String和StringBuffer的区别? 答:String是不可变的对象,每次对String类型进行...

    jdbc基础和参考

    //分别使用Statement对象和PreparedStatement对象实现 public class JDBCTest{ //查找s_user表中所有的数据,并且返回他们的集合 public Collection<User> findAll(){ } //按照名字进行删除 public int ...

    Java面试宝典2020修订版V1.0.1.doc

    20、JDBC中的PreparedStatement相比Statement的好处 71 21、写一个用jdbc连接实例。 71 22、ArrayList和Vector的区别? 73 23、List、Set和Map的区别? 74 24、Collection 和 Collections的区别。 74 25、Set里的...

    JAVA面试题最全集

    9.Java中访问数据库的步骤,Statement和PreparedStatement之间的区别。 10.找出下列代码可能存在的错误,并说明原因: 二、JSP&Servlet技术 1.描述JSP和Servlet的区别、共同点、各自应用的范围 2.在Web开发中...

    JavaWeb知识点.docx

    JavaWeb 中可以使用 JDBC API 对数据库进行增删改查操作,例如使用 Statement 对象执行 SQL 语句、使用 PreparedStatement 对象执行参数化的 SQL 语句等。 JavaWeb 是一种功能强大且灵活的Web应用程序开发技术,...

    最新Java面试宝典pdf版

    23、JDBC中的PreparedStatement相比Statement的好处 110 24. 写一个用jdbc连接并访问oracle数据的程序代码 111 25、Class.forName的作用?为什么要用? 111 26、大数据量下的分页解决方法。 111 27、用 JDBC 查询学生...

    Java面试笔试资料大全

    23、JDBC中的PreparedStatement相比Statement的好处 110 24. 写一个用jdbc连接并访问oracle数据的程序代码 111 25、Class.forName的作用?为什么要用? 111 26、大数据量下的分页解决方法。 111 27、用 JDBC 查询学生...

    Java面试宝典2010版

    23、JDBC中的PreparedStatement相比Statement的好处 24. 写一个用jdbc连接并访问oracle数据的程序代码 25、Class.forName的作用?为什么要用? 26、大数据量下的分页解决方法。 27、用 JDBC 查询学生成绩单, 把主要...

Global site tag (gtag.js) - Google Analytics