`

Statement和preparedStatement具体区别

    博客分类:
  • JAVA
阅读更多
        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对象,而前者是普通的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命令时,都会对它进行解析和编译。  
第一:

prepareStatement会先初始化SQL,先把这个SQL提交到数据库中进行预处理,多次使用可提高效率。 
createStatement不会初始化,没有预处理,没次都是从0开始执行SQL

第二:

prepareStatement可以替换变量 
在SQL语句中可以包含?,可以用ps=conn.prepareStatement("select * from Cust where ID=?"); 
int sid=1001; 
ps.setInt(1, sid); 
rs = ps.executeQuery(); 
可以把?替换成变量。 
而Statement只能用 
int sid=1001; 
Statement stmt = conn.createStatement(); 
ResultSet rs = stmt.executeQuery("select * from Cust where ID="+sid); 
来实现。

第三:

prepareStatement会先初始化SQL,先把这个SQL提交到数据库中进行预处理,多次使用可提高效率。 
createStatement不会初始化,没有预处理,没次都是从0开始执行SQL

分享到:
评论

相关推荐

    prepareStatement和Statement的区别

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

    statement和prepared区别

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

    详解Java的JDBC中Statement与PreparedStatement对象

    在Java的JDBC(Java Database Connectivity)中,与数据库交互的核心接口是Statement和PreparedStatement。这两个接口都是用于执行SQL语句的,但它们在特性和效率上有所不同。 Statement接口是最基本的SQL执行方式...

    关于PreparedStatement插入Date类型值的方法.txt

    `PreparedStatement`是`Statement`接口的子接口,用于预编译SQL语句,并可以重复执行这些预编译过的SQL语句。这不仅能够提高应用程序的性能,还能提高安全性,因为它支持参数化查询,避免了SQL注入的风险。 #### 二...

    如何获得PreparedStatement最终执行的sql语句

    一种可能的方法是通过日志配置,例如,启用MySQL的`Statement`和`PreparedStatement`日志,这样在执行时会打印出详细的SQL语句。 另外,开发工具如IntelliJ IDEA、Eclipse等,或者数据库管理工具如MySQL Workbench...

    JDBC基础教程之PreparedStatement.doc

    #### 二、`PreparedStatement`与`Statement`的区别 1. **预编译的SQL语句**: - `PreparedStatement`实例包含已编译的SQL语句,这意味着当创建此类对象时,SQL语句会被解析和编译,而不是在每次执行时都进行解析。...

    PreparedStatement 详细用法

    在Java编程语言中,`PreparedStatement`是`java.sql`包中的一个接口,它继承自`Statement`类,并提供了预编译SQL语句的功能。预编译SQL语句的主要优势在于提高了执行效率和安全性。尤其在处理动态查询或频繁执行相同...

    【性能】JDBC PreparedStatement和连接池PreparedStatement Cache学习记录

    在Java的数据库编程中,`JDBC PreparedStatement`和连接池中的`PreparedStatement Cache`是两个非常重要的概念,它们对于提升应用程序的性能和效率有着显著的作用。本文将深入探讨这两个主题,并结合Oracle数据库的...

    Pr_St_insert.rar_statement

    在编写数据库操作代码时,我们通常会遇到两种类型的SQL语句对象:Statement和PreparedStatement。这两个类都属于java.sql包,但它们在功能、安全性和性能上存在显著差异。 1. Statement对象: Statement是JDBC中最...

    java数据库连接PrepareStatement

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

    jdbc所用到的所有jar包

    1. **JDBC API**:JDBC API是Java.sql和javax.sql包中的接口和类,如Connection、Statement、PreparedStatement、ResultSet等。它们定义了与数据库交互的规范,而具体的实现由各个数据库厂商提供的驱动实现。 2. **...

    数据库连接

    示例代码中的StatementTest类展示了如何使用Statement执行SQL查询,而PrepareStatement类则演示了PreparedStatement的用法,包括预编译SQL和设置参数。 总结来说,Statement适用于执行简单的、不重复或少有变化的...

    JDBC1.zip_zip

    其中,DriverManager负责管理数据库驱动,Connection代表数据库连接,Statement和PreparedStatement用于执行SQL语句,ResultSet存储查询结果。 根据驱动程序的实现方式,JDBC驱动分为4种类型: - Type 1:纯Java ...

    JDBC.rar_Table_jdbc

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

    jdbc项目测试_Java

    Java JDBC(Java Database Connectivity)是Java编程语言中用于与数据库交互的一组接口和类,它作为Java标准版的一...在实际项目中,开发者需要根据具体的数据库系统和业务需求,灵活运用这些知识进行高效的数据操作。

    JDBC数据基础知识.pptx

    - `Connection`:代表与数据库的会话,用于创建Statement和PreparedStatement对象。 - `Statement`:用于执行非预编译的SQL语句,返回ResultSet。 - `PreparedStatement`:预编译的SQL语句,提供更高效且防止SQL...

    描述Connection、Statement、ResultSet接口的作用

    它是所有数据库操作的基础,所有的`Statement`和`PreparedStatement`实例都是通过`Connection`实例创建的。`Connection`实例封装了与数据库通信所需的底层网络连接,并提供了多种方法来控制连接状态,如打开、关闭...

    Java通用Dao包括JDBC和JNDI两种连接方式

    3. 创建Statement或PreparedStatement对象:根据SQL语句类型选择创建Statement或PreparedStatement对象。 4. 执行SQL:调用Statement或PreparedStatement的executeQuery()或executeUpdate()方法执行SQL。 5. 处理...

    JSP中使用数据库ppt课件.ppt

    JDBC API是一系列标准接口,如DriverManager、Connection、Statement、PreparedStatement和CallableStatement等,它们定义了与数据库交互的操作。JDBC驱动程序则是实现这些接口的具体数据库厂商提供的类库,确保Java...

    jdbc的入门小程序

    2. `jdbc1.java` 和 `jdbc.java`:这是未编译的Java源代码文件,学习者可以查看这些文件来理解JDBC的具体使用方法。通常,这些文件会包含`import java.sql.*;`导入语句,以使用JDBC API。例如,可能会有`Connection`...

Global site tag (gtag.js) - Google Analytics