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。
- Statement用法:
- String sql = "select seq_orderdetailid.nextval as test dual";
- Statement stat1=conn.createStatement();
- ResultSet rs1 = stat1.executeQuery(sql);
- if ( rs1.next() ) {
- id = rs1.getLong(1);
- }
-
- INOUT参数使用:
- CallableStatement cstmt = conn.prepareCall("{call revise_total(?)}");
- cstmt.setByte(1, 25);
- cstmt.registerOutParameter(1, java.sql.Types.TINYINT);
- cstmt.executeUpdate();
- byte x = cstmt.getByte(1);
-
- Statement的Batch使用:
- Statement stmt = conn.createStatement();
- String sql = null;
- for(int i =0;i<20;i++){
- sql = "insert into test(id,name)values("+i+","+i+"_name)";
- stmt.addBatch(sql);
- }
- stmt.executeBatch();
-
- PreparedStatement的Batch使用:
- PreparedStatement pstmt = con.prepareStatement("UPDATE EMPLOYEES SET SALARY = ? WHERE ID =?");
- for(int i =0;i<length;i++){
- pstmt.setBigDecimal(1, param1[i]);
- pstmt.setInt(2, param2[i]);
- pstmt.addBatch();
- }
- pstmt.executeBatch();
-
- PreparedStatement用法:
- PreparedStatement pstmt = con.prepareStatement("UPDATE EMPLOYEES SET SALARY = ? WHERE ID =?");
- pstmt.setBigDecimal(1, 153.00);
- pstmt.setInt(2, 1102);
- pstmt. executeUpdate();
分享到:
相关推荐
Statement和PreparedStatement之间的区别 Statement和PreparedStatement是JDBC中的两种不同的语句对象,用于执行数据库操作。虽然它们都可以执行SQL语句,但是它们之间存在着很大的区别。 首先, Statement对象...
Java 中 PreparedStatement 和 Statement 的区别 Java 中的 PreparedStatement 和 Statement 都是用于执行 SQL 语句的接口,但是它们之间存在一些关键的区别。 首先,从数据库执行 SQL 语句的角度来看,使用 ...
在Java编程中,数据库操作是常见任务之一,而`PreparedStatement`和`Statement`是Java JDBC(Java Database Connectivity)中用于执行SQL语句的两种主要接口。它们都是`java.sql`包下的类,用来与数据库进行交互,但...
- **作用**:提供了与数据库交互的基本手段,如创建`Statement`、`PreparedStatement`或`CallableStatement`等对象。 - **生命周期管理**: - **获取连接**:通常通过`DataSource`或直接使用`DriverManager`来获取...
prepareStatement和Statement的区别 prepareStatement和Statement是 Java 中两个常用的数据库操作接口,它们都可以用来执行 SQL 语句,但是它们之间有着明显的区别。 首先,从创建时的区别开始,Statement 需要...
- **与Statement的区别**:`CallableStatement` 和 `PreparedStatement` 都是从 `Statement` 继承而来,这意味着它们都支持执行普通的 SQL 语句。然而,`CallableStatement` 特别适用于存储过程的调用。 #### 五、...
JDBC API提供了各种方法来执行SQL语句,包括 Statement、PreparedStatement和CallableStatement等。 1.2.1 JDBC连接数据库 JDBC提供了多种方式来连接数据库,包括DriverManager和DataSource等。DriverManager提供...
在jdbc中,我们可以使用Statement、PreparedStatement和CallableStatement三个接口来执行SQL语句。 jdbc连接数据库 在jdbc中,我们可以使用DriverManager来加载数据库驱动程序,例如mysql的驱动程序...
- **CallableStatement**:专门用于执行存储过程,支持 IN、OUT 和 INOUT 参数。 ### 五、CallableStatement 的应用场景 - **复杂业务逻辑**:当需要执行复杂的业务逻辑时,通常会编写存储过程,这时就需要使用 ...
这篇博客的下篇主要讨论了如何在关闭Connection时自动关闭Statement和ResultSet,以确保资源的有效释放,防止内存泄漏。以下是对这个主题的详细解释。 首先,我们需要理解数据库连接、Statement和ResultSet在JDBC中...
其中,Statement和PreparedStatement是两种常用的SQL语句执行接口。在理解和掌握它们之间的区别之前,我们需要首先了解JDBC对于数据库操作的基本概念。 JDBC的主要作用是提供了一套标准的API,使得Java程序能够连接...
JDBC API是一系列标准接口,如DriverManager、Connection、Statement、PreparedStatement和CallableStatement等,它们定义了与数据库交互的操作。JDBC驱动程序则是实现这些接口的具体数据库厂商提供的类库,确保Java...
在Java的JDBC(Java Database Connectivity)中,与数据库交互的核心接口是Statement和PreparedStatement。这两个接口都是用于执行SQL语句的,但它们在特性和效率上有所不同。 Statement接口是最基本的SQL执行方式...
`PreparedStatement`是`Statement`接口的子接口,用于预编译SQL语句,并可以重复执行这些预编译过的SQL语句。这不仅能够提高应用程序的性能,还能提高安全性,因为它支持参数化查询,避免了SQL注入的风险。 #### 二...
一种可能的方法是通过日志配置,例如,启用MySQL的`Statement`和`PreparedStatement`日志,这样在执行时会打印出详细的SQL语句。 另外,开发工具如IntelliJ IDEA、Eclipse等,或者数据库管理工具如MySQL Workbench...
JDBC 提供了多种方式来执行 SQL 语句,包括 Statement、PreparedStatement 和 CallableStatement。Statement 对象用于执行静态 SQL 语句,而 PreparedStatement 对象用于执行带参数的 SQL 语句。CallableStatement ...
在这个例子中,首先定义了一个包含占位符的SQL语句,接着通过`connection`对象的`prepareStatement`方法创建`PreparedStatement`实例,然后通过`setInt`和`setString`方法设置参数值,最后调用`executeQuery`方法...
6. 处理ResultSet,如果有的话,然后依次关闭ResultSet、Statement和Connection,释放资源。 在实际开发中,为了更好地管理和处理异常,通常会采用try-catch-finally结构来封装这些步骤,确保资源得到正确释放。...
6. **关闭资源**:在完成数据库操作后,必须按顺序关闭ResultSet、Statement和Connection,以释放系统资源。 **JDBC的优化技巧:** 1. 使用PreparedStatement代替Statement,减少SQL解析时间。 2. 使用批处理操作...