`
langgufu
  • 浏览: 2305673 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

说说Statement、PreparedStatement和CallableStatement的异同(转)

阅读更多

1.Statement、PreparedStatement和CallableStatement都是接口(interface)。
2.Statement继承自Wrapper、PreparedStatement继承自Statement、CallableStatement继承自PreparedStatement。
3.
Statement接口提供了执行语句和获取结果的基本方法;
PreparedStatement接口添加了处理 IN 参数的方法;
CallableStatement接口添加了处理 OUT 参数的方法。
4.
a.Statement:
普通的不带参的查询SQL;支持批量更新,批量删除;
b.PreparedStatement:
可变参数的SQL,编译一次,执行多次,效率高;
安全性好,有效防止Sql注入等问题;
支持批量更新,批量删除;
c.CallableStatement:
继承自PreparedStatement,支持带参数的SQL操作;
支持调用存储过程,提供了对输出和输入/输出参数(INOUT)的支持;

Statement每次执行sql语句,数据库都要执行sql语句的编译 ,
最好用于仅执行一次查询并返回结果的情形,效率高于PreparedStatement。

PreparedStatement是预编译的,使用PreparedStatement有几个好处
1. 在执行可变参数的一条SQL时,PreparedStatement比Statement的效率高,因为DBMS预编译一条SQL当然会比多次编译一条SQL的效率要高。
2. 安全性好,有效防止Sql注入等问题。
3.  对于多次重复执行的语句,使用PreparedStament效率会更高一点,并且在这种情况下也比较适合使用batch;
4.  代码的可读性和可维护性。

注:
executeQuery:返回结果集(ResultSet)。
executeUpdate: 执行给定SQL语句,该语句可能为 INSERT、UPDATE 或 DELETE 语句,
或者不返回任何内容的SQL语句(如 SQL DDL 语句)。
execute: 可用于执行任何SQL语句,返回一个boolean值,
表明执行该SQL语句是否返回了ResultSet。如果执行后第一个结果是ResultSet,则返回true,否则返回false。

Java代码 复制代码 收藏代码
  1. Statement用法:   
  2. String sql = "select seq_orderdetailid.nextval as test dual";   
  3. Statement stat1=conn.createStatement();   
  4. ResultSet rs1 = stat1.executeQuery(sql);   
  5. if ( rs1.next() ) {   
  6.     id = rs1.getLong(1);   
  7. }   
  8.   
  9. INOUT参数使用:   
  10. CallableStatement cstmt = conn.prepareCall("{call revise_total(?)}");   
  11. cstmt.setByte(125);   
  12. cstmt.registerOutParameter(1, java.sql.Types.TINYINT);   
  13. cstmt.executeUpdate();   
  14. byte x = cstmt.getByte(1);   
  15.   
  16. Statement的Batch使用:   
  17. Statement stmt  = conn.createStatement();   
  18. String sql = null;   
  19. for(int i =0;i<20;i++){   
  20.     sql = "insert into test(id,name)values("+i+","+i+"_name)";   
  21.     stmt.addBatch(sql);   
  22. }   
  23. stmt.executeBatch();   
  24.   
  25. PreparedStatement的Batch使用:   
  26. PreparedStatement pstmt  = con.prepareStatement("UPDATE EMPLOYEES  SET SALARY = ? WHERE ID =?");   
  27. for(int i =0;i<length;i++){   
  28.     pstmt.setBigDecimal(1, param1[i]);   
  29.     pstmt.setInt(2, param2[i]);   
  30.     pstmt.addBatch();   
  31. }   
  32. pstmt.executeBatch();   
  33.   
  34. PreparedStatement用法:   
  35. PreparedStatement pstmt  = con.prepareStatement("UPDATE EMPLOYEES  SET SALARY = ? WHERE ID =?");   
  36. pstmt.setBigDecimal(1153.00);   
  37. pstmt.setInt(21102);   
  38. pstmt. executeUpdate();  
分享到:
评论

相关推荐

    Statement和PreparedStatement之间的区别

    Statement和PreparedStatement之间的区别 Statement和PreparedStatement是JDBC中的两种不同的语句对象,用于执行数据库操作。虽然它们都可以执行SQL语句,但是它们之间存在着很大的区别。 首先, Statement对象...

    java中PreparedStatement和Statement的区别

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

    PreparedStatement和Statement

    在Java编程中,数据库操作是常见任务之一,而`PreparedStatement`和`Statement`是Java JDBC(Java Database Connectivity)中用于执行SQL语句的两种主要接口。它们都是`java.sql`包下的类,用来与数据库进行交互,但...

    connection 和 preparedstatement 的关闭问题

    - **作用**:提供了与数据库交互的基本手段,如创建`Statement`、`PreparedStatement`或`CallableStatement`等对象。 - **生命周期管理**: - **获取连接**:通常通过`DataSource`或直接使用`DriverManager`来获取...

    prepareStatement和Statement的区别

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

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

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

    CallableStatement的用法

    - **与Statement的区别**:`CallableStatement` 和 `PreparedStatement` 都是从 `Statement` 继承而来,这意味着它们都支持执行普通的 SQL 语句。然而,`CallableStatement` 特别适用于存储过程的调用。 #### 五、...

    myBatis01.pdf

    JDBC API提供了各种方法来执行SQL语句,包括 Statement、PreparedStatement和CallableStatement等。 1.2.1 JDBC连接数据库 JDBC提供了多种方式来连接数据库,包括DriverManager和DataSource等。DriverManager提供...

    jdbc-增删改查和封装增删改查.docx

    在jdbc中,我们可以使用Statement、PreparedStatement和CallableStatement三个接口来执行SQL语句。 jdbc连接数据库 在jdbc中,我们可以使用DriverManager来加载数据库驱动程序,例如mysql的驱动程序...

    java数据库连接CallableStatement

    - **CallableStatement**:专门用于执行存储过程,支持 IN、OUT 和 INOUT 参数。 ### 五、CallableStatement 的应用场景 - **复杂业务逻辑**:当需要执行复杂的业务逻辑时,通常会编写存储过程,这时就需要使用 ...

    怎样实现关闭connection时自动关闭Statement和ResultSet (下篇)

    这篇博客的下篇主要讨论了如何在关闭Connection时自动关闭Statement和ResultSet,以确保资源的有效释放,防止内存泄漏。以下是对这个主题的详细解释。 首先,我们需要理解数据库连接、Statement和ResultSet在JDBC中...

    statement和prepared区别

    其中,Statement和PreparedStatement是两种常用的SQL语句执行接口。在理解和掌握它们之间的区别之前,我们需要首先了解JDBC对于数据库操作的基本概念。 JDBC的主要作用是提供了一套标准的API,使得Java程序能够连接...

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

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

    详解Java的JDBC中Statement与PreparedStatement对象

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

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

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

    数据库系统应用与开发实验四.pdf

    JDBC 提供了多种方式来执行 SQL 语句,包括 Statement、PreparedStatement 和 CallableStatement。Statement 对象用于执行静态 SQL 语句,而 PreparedStatement 对象用于执行带参数的 SQL 语句。CallableStatement ...

    PreparedStatement详细用法

    在这个例子中,首先定义了一个包含占位符的SQL语句,接着通过`connection`对象的`prepareStatement`方法创建`PreparedStatement`实例,然后通过`setInt`和`setString`方法设置参数值,最后调用`executeQuery`方法...

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

    6. 处理ResultSet,如果有的话,然后依次关闭ResultSet、Statement和Connection,释放资源。 在实际开发中,为了更好地管理和处理异常,通常会采用try-catch-finally结构来封装这些步骤,确保资源得到正确释放。...

    JDBC.rar_JDBC程序

    6. **关闭资源**:在完成数据库操作后,必须按顺序关闭ResultSet、Statement和Connection,以释放系统资源。 **JDBC的优化技巧:** 1. 使用PreparedStatement代替Statement,减少SQL解析时间。 2. 使用批处理操作...

Global site tag (gtag.js) - Google Analytics