`

JDBC 有关executeQuery、executeUpdate 和 execute

 
阅读更多

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

★方法executeQuery --单个结果集(常用) 
用于产生单个结果集的语句,例如 SELECT 语句。 

★方法executeUpdate --(非select语句) 
--用于执行不是Select语句的其它所有语句,例如 INSERT、UPDATE 或 DELETE 、 CREATE TABLE 和 DROP TABLE。 
--executeUpdate 的返回值是一个整数,指示受影响的行数(即更新计数)。对于 CREATE TABLE 或 DROP TABLE 等不操作行的语句,executeUpdate 的返回值总为零。 
   说明:在JDBC开发,上面两个方法就够用了。 
   
★方法execute  --多个结果集(少用) 
--execute方法应该仅在语句能返回多个ResultSet对象、多个更新计数或ResultSet对象与更新计数的组合时使用。当执行某个存储过程或动态执行未知 SQL 字符串(即应用程序程序员在编译时未知)时,有可能出现多个结果的情况,尽管这种情况很少见。 

资料:execute方法详解 
★方法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; // 没有其它结果 

 

 

FROM:http://ldison.iteye.com/blog/1112706

分享到:
评论

相关推荐

    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之间的区别

    在Java开发中,尤其涉及到数据库操作时,`execute`, `executeQuery` 和 `executeUpdate` 这三个方法是JDBC编程中非常重要的一部分。它们分别适用于不同类型的SQL语句,理解这些方法的区别对于正确高效地执行数据库...

    MySQL execute、executeUpdate、executeQuery三者的区别

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

    使用JDBC操作数据库

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

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

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

    hive jdbc依赖的jar包

    3. **执行SQL**:通过`Connection`对象创建`Statement`或`PreparedStatement`,然后调用其`executeQuery()`或`executeUpdate()`方法执行SQL语句,如创建表、插入数据、查询等。 4. **结果集处理**:对于查询语句,`...

    JDBC连接数据库总结

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

    jdbc相关知识点的MindMap

    ### JDBC相关知识点详解 #### 一、JDBC简介 JDBC(Java Database Connectivity)是Java中用来对关系型数据库进行统一访问的标准API,它提供了一组接口与规范,允许Java程序连接多种数据库,并执行SQL语句,从而...

    JDBC的工具类

    在Java编程中,JDBC(Java Database Connectivity)是用于与各种数据库进行交互的一组接口和类。它允许Java应用程序执行SQL语句并处理结果。在实际开发中,为了提高代码的可重用性和减少重复性工作,我们通常会创建...

    java,JDBC例子

    5. **执行SQL**:通过`executeQuery()`, `executeUpdate()`或`execute()`方法执行SQL语句。`executeQuery()`用于执行查询语句,返回`ResultSet`;`executeUpdate()`用于执行DML(增删改)语句,返回受影响的行数;`...

    使用jdbc动态连接数据库

    作为Java核心类库的一部分,JDBC的一个显著特点是它的通用性和独立性——它不仅能够与多种不同的数据库系统配合工作,而且对于开发人员来说,无需了解底层数据库的具体实现细节即可编写出高效、稳定的数据库应用程序...

    java(jdbc)学习

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

    JDBC数据库访问技术全解和实例源代码

    ### JDBC数据库访问技术详解与实例源代码解析 #### 一、JDBC数据库访问技术概述 ...以上是对JDBC数据库访问技术及其应用的一个全面介绍,通过这些示例和解释,开发者可以更好地理解和掌握JDBC的核心概念和技术细节。

    Accessing-Databases-JDBC

    虽然 JDBC 标准化了连接到数据库的方法、发送查询和提交事务的语法以及表示结果的数据结构,但它并不试图标准化 SQL 语法本身。因此,开发者可以在不大幅修改代码的情况下更改数据库主机、端口甚至数据库供应商。 #...

    jdbc课程笔记教案.docx

    4. 执行SQL语句:`stmt.executeUpdate(sql)`(对于DML语句)或`ResultSet rs = stmt.executeQuery(sql)`(对于查询语句) 5. 处理结果集(如果有的话):遍历`ResultSet`,获取数据 6. 关闭资源:`rs.close()`, `...

    老罗 jdbc 源码

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

    java_JDBC连接数据库代码大全

    Java JDBC 连接数据库代码大全 JDBC(Java Database Connectivity)是一种可以执行 SQL 的 Java API,通过它可以用...通过了解 JDBC 的基础知识和常用接口,可以更好地使用 JDBC 连接数据库,提高开发效率和应用性能。

    oracle 11g jdbc jar包

    4. 执行SQL:调用Statement对象的executeQuery()、executeUpdate()或execute()方法执行SQL语句。 5. 处理结果:对于查询语句,使用ResultSet处理结果;对于DML语句,检查是否受影响的行数。 6. 关闭资源:在完成操作...

Global site tag (gtag.js) - Google Analytics