`
s103y
  • 浏览: 116154 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Statement和PreparedStatement之间的区别

阅读更多
Statement和PreparedStatement之间的区别
2007年07月18日 星期三 09:20
转自: http://blog.sina.com.cn/u/3e9d2b3501000a52
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对象,而前者是普通的Statement对象。PreparedStatement对象不仅包含了SQL语句,而且大多数情况下这个语句已经被预编译过,因而当其执行时,只需DBMS运行SQL语句,而不必先编译。当你需要执行Statement对象多次的时候,PreparedStatement对象将会大大降低运行时间,当然也加快了访问数据库的速度。
这种转换也给你带来很大的便利,不必重复SQL语句的句法,而只需更改其中变量的值,便可重新执行SQL语句。选择PreparedStatement对象与否,在于相同句法的SQL语句是否执行了多次,而且两次之间的差别仅仅是变量的不同。如果仅仅执行了一次的话,它应该和普通的对象毫无差异,体现不出它预编译的优越性。
5.执行许多SQL语句的JDBC程序产生大量的Statement和PreparedStatement对象。通常认为PreparedStatement对象比Statement对象更有效,特别是如果带有不同参数的同一SQL语句被多次执行的时候。PreparedStatement对象允许数据库预编译SQL语句,这样在随后的运行中可以节省时间并增加代码的可读性。

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

然而,除了缓冲的问题之外,至少还有一个更好的原因使我们在企业应用程序中更喜欢使用PreparedStatement对象,那就是安全性。传递给PreparedStatement对象的参数可以被强制进行类型转换,使开发人员可以确保在插入或查询数据时与底层的数据库格式匹配。

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

在Web环境中,有恶意的用户会利用那些设计不完善的、不能正确处理字符串的应用程序。特别是在公共Web站点上,在没有首先通过PreparedStatement对象处理的情况下,所有的用户输入都不应该传递给SQL语句。此外,在用户有机会修改SQL语句的地方,如HTML的隐藏区域或一个查询字符串上,SQL语句都不应该被显示出来。
在执行SQL命令时,我们有二种选择:可以使用PreparedStatement对象,也可以使用Statement对象。无论多少次地使用同一个SQL命令,PreparedStatement都只对它解析和编译一次。当使用Statement对象时,每次执行一个SQL命令时,都会对它进行解析和编译。   
分享到:
评论

相关推荐

    java中PreparedStatement和Statement的区别

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

    prepareStatement和Statement的区别

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

    statement和prepared区别

    在使用Java语言进行数据库交互时,JDBC(Java Database Connectivity)是实现...总之,理解Statement和PreparedStatement之间的区别,能够帮助我们更好地使用JDBC进行数据库操作,从而编写出更加高效、安全的Java程序。

    connection 和 preparedstatement 的关闭问题

    ### Connection 和 ...理解它们之间的区别,并根据实际需求选择合适的方法,能够显著提升应用的质量。同时,合理管理`Connection`的生命周期也是至关重要的,这不仅能有效利用资源,还能避免潜在的性能问题和错误。

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

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

    JDBC(用PrepareStatement实现)

    在实际开发中,为了提高效率和安全性,我们通常会使用PreparedStatement接口来代替Statement接口。 1. **PreparedStatement简介** PreparedStatement是Statement的一个子接口,它的主要优势在于预编译。预编译的...

    JDBC.zip_创建数据对象

    3. **Statement**:用于执行SQL查询,分为Statement、PreparedStatement和CallableStatement三种。Statement用于执行静态SQL语句,PreparedStatement允许预编译SQL语句,CallableStatement用于调用存储过程。 4. **...

    java数据库连接PrepareStatement

    在 Java 的数据库编程中,`PreparedStatement` 是一个非常重要的类,它继承自 `Statement` 类,并提供了更高级的功能来处理 SQL 语句,尤其是在处理参数化查询时更为高效和安全。下面我们将详细介绍 `...

    jdbc 总结 有参考价值

    通过上述内容,我们了解了JDBC的运作机制,掌握了使用Statement和PreparedStatement的关键点,以及如何进行事务管理和结果集处理。这些知识对于开发和维护数据库驱动的Java应用程序具有重要的参考价值。

    JDBC技术使用标准的 SQL 语言对数据库表中的数据进行访问,以及增删查改

    JDBC的核心在于其API,它包括了DriverManager、Connection、Statement、PreparedStatement和ResultSet等关键组件。 1. DriverManager:DriverManager类是JDBC的核心组件之一,负责管理数据库驱动程序。它提供了加载...

    JDBC与Java数据库程序设计_0.rar_JAVA数据库_java huffman_java 数据库_jdbc_数据库程序

    3. Statement和PreparedStatement:Statement用于执行静态SQL语句,而PreparedStatement则用于预编译SQL语句,提供更好的性能和安全性,因为它可以防止SQL注入攻击。 4. ResultSet:当执行查询操作后,结果通常会被...

    JDBC.rar_Table_jdbc

    3. 创建Statement/PreparedStatement对象:根据需求选择创建Statement或PreparedStatement对象。 4. 执行SQL:调用Statement或PreparedStatement的executeQuery()或executeUpdate()方法执行SQL。 5. 处理结果:对于...

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

    2. 批量处理:使用`Statement`或`PreparedStatement`的`addBatch()`和`executeBatch()`方法进行批量SQL操作,减少网络通信次数。 3. 数据库连接池:通过连接池管理数据库连接,避免频繁创建和关闭连接,提高系统效率...

    jdbc通用数据库连接

    4. **Statement/PreparedStatement**:Statement用于执行静态SQL语句,而PreparedStatement则支持预编译的SQL语句,更安全且效率更高,防止SQL注入。 5. **结果集(ResultSet)**:执行查询操作后返回的数据集,...

    jdbc项目测试_Java

    1. **Driver Manager**:它是Java应用程序和数据库之间的桥梁,负责管理所有注册的JDBC驱动,并根据提供的数据库URL和连接属性建立到数据库的连接。 2. **JDBC Driver**:这是与特定数据库通信的实现,通常由数据库...

    Java语言SQL接口—JDBC编程技术

    - Statement对象:用于执行SQL查询和更新语句,有三种形式:Statement、PreparedStatement和CallableStatement。 - ResultSet对象:存储查询结果,提供遍历查询结果的方法。 - PreparedStatement:预编译的SQL...

    完整版 Java高级教程 Java语言程序设计 第8章 JDBC(共24页).ppt

    驱动程序是数据库特定的,它实现了Java.sql包中的接口,如Connection、Statement、PreparedStatement和ResultSet等。这些接口是JDBC的核心组成部分,它们定义了与数据库交互的各种方法。 1. **Connection接口**:...

    jdbc.rar_JDBC增删改查_inq6z_java_jdbc

    3. **数据库操作**:Statement和PreparedStatement对象用于执行SQL语句,PreparedStatement支持预编译,提高性能并防止SQL注入。 4. **结果集(ResultSet)**:执行查询后返回的结果集,包含了查询的行数据。 5. *...

Global site tag (gtag.js) - Google Analytics