`

说说Statement、PreparedStatement和CallableStatement的异同.

    博客分类:
  • java
 
阅读更多
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();
分享到:
评论

相关推荐

    MySql练习3:使用PreparedStatement插入宠物信息.zip

    MySql练习3:使用PreparedStatement插入宠物信息.zip MySql练习3:使用PreparedStatement插入宠物信息.zip MySql练习3:使用PreparedStatement插入宠物信息.zip

    练习3:使用PreparedStatement插入宠物信息.zip

    在Java编程中,PreparedStatement是Java SQL API中的一个接口,它是Statement接口的子接口。这个练习主要涉及如何使用PreparedStatement来插入宠物信息到数据库中。PreparedStatement的主要优势在于它的预编译能力和...

    Statement和PreparedStatement之间的区别

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

    【IT十八掌徐培成】Java基础第23天-02.sql注入-preparedstatement-批量插入.zip

    PreparedStatement是Statement的子接口,它的主要特点是预编译SQL语句。在创建PreparedStatement对象时,我们会提供一个包含占位符(如?)的SQL模板,然后在执行时传入具体的参数值。这样,数据库会预先解析并优化这...

    Java面试题34.jdbc中preparedStatement比Statement的好处.mp4

    Java面试题34.jdbc中preparedStatement比Statement的好处.mp4

    Java-JDBC【源码】JDBC概述、获取连接、SQL注入问题与解决、查询解析

    Java-JDBC【之】JDBC概述、获取连接、SQL注入问题与解决、查询...3.SQL注入问题与解决(Statement 、PreparedStatement) 3.1.模拟SQL注入 3.2.PreparedStatement解决 3.3.Statement 与 PreparedStatement 4.完整源码

    java中PreparedStatement和Statement的区别

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

    CallableStatement的用法

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

    34.jdbc中preparedStatement比Statement的好处.avi

    jdbc中preparedStatement比Statement的好处

    PreparedStatement和Statement

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

    bookstore 网上书店源码

    ResultSet resultSet = preparedStatement.executeQuery (); if(!resultSet.next()) occupied=false; preparedStatement.close (); ConnDB.terminate(); } catch(SQLException e){ e.printStackTrace(); ...

    JDBC基础教程之CallableStatement.doc

    ### JDBC基础教程之CallableStatement详解 #### 一、概述 在数据库编程中,为了提高...了解如何创建和使用`CallableStatement`对象,以及如何正确设置输入、输出和输入输出参数,对于进行高效的数据库编程至关重要。

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

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

    callablestatement

    在Java编程中,处理数据库操作时,`CallableStatement`是一个非常重要的接口,它继承自`PreparedStatement`,专门用于调用数据库中的存储过程或函数。通过`CallableStatement`,开发者可以轻松地将Java应用程序与...

    Java高级教程课件 java数据库教程 JDBC教程 4-jdbc编程(2)(共5页).pptx

    在本教程中,我们将深入探讨PreparedStatement和CallableStatement接口,以及Oracle数据库中处理LOB数据的方法。 1. PreparedStatement接口 PreparedStatement接口是为了提高SQL语句执行的效率和安全性而设计的。当...

    项目源码-java企业QQ项目

    import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.Iterator; import java.util.List; ...

    MVC模式的实现的增删改查

    PreparedStatement ps=conn.prepareStatement("select * from Contact"); ResultSet rs=ps.executeQuery(); List&lt;Contact&gt; list = new ArrayList(); while(rs.next()){ int id = rs.getInt("id")...

    JDBC基础教程之PreparedStatement.doc

    `PreparedStatement`是Java数据库连接(JDBC)API中的一种重要接口,它继承自`Statement`接口,并在其基础上进行了扩展和优化。`PreparedStatement`的主要特点在于它可以预先编译SQL语句,并允许用户在执行前动态地...

    java调用存储过程

    调用存储过程主要通过CallableStatement接口,它是PreparedStatement的一个子接口,专为调用数据库的存储过程而设计。以下是一个简单的调用存储过程的步骤: 1. **加载驱动**:首先,我们需要加载对应数据库的JDBC...

    prepareStatement和Statement的区别

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

Global site tag (gtag.js) - Google Analytics