`

JDBC中Statement接口提供的execute、executeQuery和executeUpdate之间的区别

 
阅读更多

Statement 接口提供了三种执行 SQL 语句的方法:executeQuery、executeUpdate 和 execute。使用哪一个方法由 SQL 语句所产生的内容决定。

         方法executeQuery
         用于产生单个结果集的语句,例如 SELECT 语句。 被使用最多的执行 SQL 语句的方法是 executeQuery。这个方法被用来执行 SELECT 语句,它几乎是使用最多的 SQL 语句。

         方法executeUpdate
         用于执行 INSERT、UPDATE 或 DELETE 语句以及 SQL DDL(数据定义语言)语句,例如 CREATE TABLE 和 DROP TABLE。INSERT、UPDATE 或 DELETE 语句的效果是修改表中零行或多行中的一列或多列。executeUpdate 的返回值是一个整数,指示受影响的行数(即更新计数)。对于 CREATE TABLE 或 DROP TABLE 等不操作行的语句,executeUpdate 的返回值总为零。

         使用executeUpdate方法是因为在 createTableCoffees 中的 SQL 语句是 DDL (数据定义语言)语句。创建表,改变表,删除表都是 DDL 语句的例子,要用 executeUpdate 方法来执行。你也可以从它的名字里看出,方法 executeUpdate 也被用于执行更新表 SQL 语句。实际上,相对于创建表来说,executeUpdate 用于更新表的时间更多,因为表只需要创建一次,但经常被更新。


         方法execute:
         用于执行返回多个结果集、多个更新计数或二者组合的语句。因为多数程序员不会需要该高级功能

         execute方法应该仅在语句能返回多个ResultSet对象、多个更新计数或ResultSet对象与更新计数的组合时使用。当执行某个已存储过程或动态执行未知 SQL 字符串(即应用程序程序员在编译时未知)时,有可能出现多个结果的情况,尽管这种情况很少见。
         因为方法 execute 处理非常规情况,所以获取其结果需要一些特殊处理并不足为怪。例如,假定已知某个过程返回两个结果集,则在使用方法 execute 执行该过程后,必须调用方法 getResultSet 获得第一个结果集,然后调用适当的 getXXX 方法获取其中的值。要获得第二个结果集,需要先调用 getMoreResults 方法,然后再调用 getResultSet 方法。如果已知某个过程返回两个更新计数,则首先调用方法 getUpdateCount,然后调用 getMoreResults,并再次调用 getUpdateCount。
         对于不知道返回内容,则情况更为复杂。如果结果是 ResultSet 对象,则方法 execute 返回 true;如果结果是 Java int,则返回 false。如果返回 int,则意味着结果是更新计数或执行的语句是 DDL 命令。在调用方法 execute 之后要做的第一件事情是调用 getResultSet 或 getUpdateCount。调用方法 getResultSet 可以获得两个或多个 ResultSet 对象中第一个对象;或调用方法 getUpdateCount 可以获得两个或多个更新计数中第一个更新计数的内容。
         当 SQL 语句的结果不是结果集时,则方法 getResultSet 将返回 null。这可能意味着结果是一个更新计数或没有其它结果。在这种情况下,判断 null 真正含义的唯一方法是调用方法 getUpdateCount,它将返回一个整数。这个整数为调用语句所影响的行数;如果为 -1 则表示结果是结果集或没有结果。如果方法 getResultSet 已返回 null(表示结果不是 ResultSet 对象),则返回值 -1 表示没有其它结果。也就是说,当下列条件为真时表示没有结果(或没有其它结果):

((stmt.getResultSet() == null) && (stmt.getUpdateCount() == -1))

         如果已经调用方法 getResultSet 并处理了它返回的 ResultSet 对象,则有必要调用方法 getMoreResults 以确定是否有其它结果集或更新计数。如果 getMoreResults 返回 true,则需要再次调用 getResultSet 来检索下一个结果集。如上所述,如果 getResultSet 返回 null,则需要调用 getUpdateCount 来检查 null 是表示结果为更新计数还是表示没有其它结果。

         当 getMoreResults 返回 false 时,它表示该 SQL 语句返回一个更新计数或没有其它结果。因此需要调用方法 getUpdateCount 来检查它是哪一种情况。在这种情况下,当下列条件为真时表示没有其它结果:

((stmt.getMoreResults() == false) && (stmt.getUpdateCount() == -1))

         下面的代码演示了一种方法用来确认已访问调用方法 execute 所产生的全部结果集和更新计数:


stmt.execute(queryStringWithUnknownResults);
while (true) {
int rowCount = stmt.getUpdateCount();
if (rowCount > 0) { // 它是更新计数
System.out.println("Rows changed = " + count);
stmt.getMoreResults();
continue;
}
if (rowCount == 0) { // DDL 命令或 0 个更新
System.out.println(" No rows changed or statement was DDL
command");
stmt.getMoreResults();
continue;
}

// 执行到这里,证明有一个结果集
// 或没有其它结果

ResultSet rs = stmt.getResultSet;
if (rs != null) {
. . . // 使用元数据获得关于结果集列的信息
while (rs.next()) {
. . . // 处理结果
stmt.getMoreResults();
continue;
}
break; // 没有其它结果
分享到:
评论

相关推荐

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

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

    execute、executeQuery和executeUpdate之间的区别.doc

    ### JDBC中Statement接口提供的execute、executeQuery和executeUpdate的区别 #### 一、概述 在Java开发过程中,尤其是在处理数据库操作时,我们经常会遇到`execute`、`executeQuery`和`executeUpdate`这三个方法。...

    execute、executeQuery和executeUpdate之间的区别

    ### Execute、ExecuteQuery和ExecuteUpdate之间的区别 在Java开发中,尤其涉及到数据库操作时,`execute`, `executeQuery` 和 `executeUpdate` 这三个方法是JDBC编程中非常重要的一部分。它们分别适用于不同类型的...

    MySQL execute、executeUpdate、executeQuery三者的区别

    在MySQL和其他支持JDBC(Java Database Connectivity)的数据库系统中,`Statement`接口提供了三个用于执行SQL语句的方法:`execute()`, `executeUpdate()` 和 `executeQuery()`。这三个方法在处理不同类型的SQL语句...

    JDBC常考知识点,常用api

    `Connection`接口提供了创建Statement、PreparedStatement和CallableStatement对象的方法,以执行SQL语句。 - `createStatement()`:返回一个Statement对象,用于执行非参数化的SQL语句。 - `prepareStatement...

    Java软件开发实战 Java基础与案例开发详解 18-2 JDBC类和接口 共16页.pdf

    根据给定文件的信息,本文将重点讲解第18章中关于JDBC类和接口的知识点。这部分内容主要涉及Java数据库连接(JDBC)的核心概念、关键类和接口,以及它们如何帮助开发者进行数据库操作。 ### 18.2 JDBC类和接口 ###...

    第10章 JDBC-课后习题1

    3. `Statement`接口的`executeUpdate(String sql)`方法用于执行SQL中的`insert`、`update`和`delete`语句。 4. `PreparedStatement`是`Statement`的子接口,用于执行预编译的SQL语句。 5. `ResultSet`接口中定义了...

    使用JDBC操作数据库

    4. **执行SQL**:调用Statement或PreparedStatement的`executeQuery()`或`executeUpdate()`方法执行SQL语句。 5. **处理结果**:如果执行的是查询语句,可以使用ResultSet对象遍历查询结果。例如,`while ...

    JDBC数据库访问(七步).ppt

    可以通过调用 Statement 的 executeQuery、executeUpdate 或 execute 方法来执行 SQL 语句。 第六步:处理结果集 在执行 SQL 语句后,需要处理结果集。可以通过调用 Statement 的 getResultSet 方法来获取结果集,...

    老罗 jdbc 源码

    - 执行SQL:调用Statement的executeQuery()或executeUpdate()方法。 - 处理结果:如果执行的是查询,通过ResultSet处理结果;如果是更新操作,返回受影响的行数。 - 关闭资源:确保在操作完成后关闭Statement、...

    jdbc课程笔记教案.docx

    驱动程序通常以JAR包的形式提供,需要在应用程序中加载,以便Java程序能够通过JDBC接口与特定数据库进行通信。没有驱动,Java程序无法完成数据库的连接。 【JDBC for MySQL 的配置】 配置JDBC for MySQL通常涉及...

    JDBC连接数据库总结

    它提供了三种执行SQL语句的方法:`executeUpdate()`、`executeQuery()`和`execute()`。其中,`executeUpdate()`方法用于执行增、删、改操作,`executeQuery()`方法用于执行查询操作。 在上面的代码中,`...

    java(jdbc)学习

    1. **常用方法**:`execute()`, `executeQuery()`, `executeUpdate()`等,分别用于执行任意SQL语句、查询语句和更新语句。 2. **CRUD操作**:利用Statement执行Create(插入)、Read(查询)、Update(更新)和...

    使用jdbc动态连接数据库

    它是JDBC的核心类之一,主要用于用户和驱动程序之间的通信。`DriverManager`类的一些关键方法包括: - `getConnection(String url, Properties info)`:根据提供的URL和属性信息建立到数据库的连接。 - `getDrivers...

    hive jdbc依赖的jar包

    Hive JDBC是Apache Hive项目的一部分,它提供了一个Java数据库连接(JDBC)接口,使得其他应用程序,如Python、Java或任何支持JDBC的环境,能够与Hive进行交互。Hive JDBC驱动程序允许用户通过标准的JDBC API来执行...

    JDBC入门基础讲座

    4. **执行SQL语句/存储过程**: 使用Statement对象的executeQuery()或executeUpdate(),PreparedStatement的execute()方法。 5. **处理结果集**: 如果是查询操作,遍历ResultSet对象,获取数据。 6. **关闭资源**: ...

    JDBC知识点总结

    #### 五、JDBC 常用类和接口详解 **DriverManager** - `java.sql.DriverManager` 类提供了用于注册 JDBC 驱动和创建数据库连接的方法。 - **注册驱动**: - 使用 `Class.forName("com.mysql.jdbc.Driver")` 来...

    JDBC知识总结(针对基础知识)

    - `Statement`方法区别:`execute()`执行任意语句,`executeUpdate()`用于增删改操作,`executeQuery()`用于查询。 - 固定驱动:直接实例化指定的`Driver`,然后通过`DriverManager.registerDriver(drv)`注册。 -...

    JDBC.rar_JDBC程序

    4. **执行SQL**:调用Statement对象的`executeQuery()`(查询)、`executeUpdate()`(增删改)或`execute()`(执行存储过程)方法。 5. **处理结果**:对于查询操作,得到ResultSet对象并遍历;对于增删改操作,...

    jdbc 知识点详解

    无论是简单的数据操作还是复杂的事务处理,JDBC都提供了相应的接口和方法来支持。随着Java技术的发展,出现了ORM框架(如Hibernate、MyBatis)简化了JDBC的使用,但了解JDBC的基础知识仍然是必要的,因为这些框架的...

Global site tag (gtag.js) - Google Analytics