`
java1573
  • 浏览: 123339 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

JDBC两个常用的三种方法·转

阅读更多

 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; // 没有其它结果
 
 

分享到:
评论
2 楼 javacoo 2007-11-23  
肖老 你好撒
1 楼 csfjj12345 2007-11-21  
……………………………………………………………………………………

相关推荐

    jdbc常用类方法和jsp白皮书

    在Java Web开发中,JDBC...结合“JDBC常用类和方法.doc”和“JSP白皮书.doc”,我们可以深入学习这两个领域的细节,提高数据库操作和动态网页开发的能力。理解并熟练运用这些知识点,将有助于构建高效、健壮的Web应用。

    常用数据库驱动和JDBC+URL

    - JDBC URL 可以有两种格式,一种是使用服务名:jdbc:oracle:thin:@//<host>:<port>/ServiceName,另一种是使用SID:jdbc:oracle:thin:@<host>:<port>:。 3. IBM DB2 JDBC 驱动 - DB2 Universal Driver Type 4 使用...

    常用数据库jdbc驱动

    它分为两个版本:Type 4驱动和JDBC-ODBC桥接驱动。Type 4驱动是纯Java实现,直接与数据库通信,不需要中间的ODBC层。SQL Server 2005的JDBC驱动jar文件可能名为sqljdbc4.jar,提供对Java 6的支持。 3. MySQL 5.1.6 ...

    oracle9i的2个常用jdbc

    在你提到的"oracle9i的2个常用jdbc"中,主要涉及到的是`ojdbc14.jar`和`classes12.jar`这两个驱动包。 1. **ojdbc14.jar**: `ojdbc14.jar`是Oracle 9i的JDBC Type 4驱动程序,也被称为纯Java驱动。它实现了JDBC ...

    Spring JDBC常用Jar包

    这两个概念是Spring框架的核心,使你能够解耦代码,提高可测试性和可维护性。 4. **spring-jdbc-3.2.3.RELEASE.jar**: 这是Spring JDBC模块的实现,提供了对JDBC的抽象,包括DataSource的管理、JdbcTemplate、...

    JDBC驱动

    在提供的压缩包中,有两个文件:`setup.exe`和`install.txt`。`setup.exe`很可能是安装程序,用于在用户的计算机上安装JDBC驱动。用户需要运行这个可执行文件,按照向导指示完成驱动的安装过程。通常,这会将必要的...

    jtds1.2.4+sqljdbc4.2.0两个jar包文件

    "jtds1.2.4+sqljdbc4.2.0两个jar包文件"是两个常用的数据库连接组件,它们在Java应用中起到了桥梁的作用,帮助程序与数据库进行通信。 首先,`jtds-1.2.4.jar`是JDBC驱动的实现,专门用于连接Microsoft SQL Server...

    jdbc资料jdbc资料jdbc资料pdf

    - **`java.sql`包和`javax.sql`包**:这两个包包含了JDBC的核心类和接口。 - `java.sql`包含基础的JDBC类和接口,如`Connection`, `Statement`, `ResultSet`等。 - `javax.sql`包含高级功能,例如`DataSource`等。...

    常用数据库JDBC驱动程序打包下载

    本压缩包"常用数据库JDBC驱动程序打包下载"提供了三种主流数据库的JDBC驱动,包括Oracle、MySQL和MSSQL,方便开发者一次性获取所需资源,避免了逐个寻找和安装的繁琐过程。 首先,Oracle JDBC驱动,也称为Oracle ...

    JDBC常用的数据库连接.doc

    jTDS是一个开源的SQL Server驱动,支持两种连接方式。以下是使用jTDS的方式: - 第一种: ```java Class.forName("net.sourceforge.jtds.jdbc.Driver"); Connection cn = DriverManager.getConnection( "jdbc:...

    JDBC学习笔记--JDBC学习笔记

    JDBC API可以分为两类:应用程序开发接口和驱动程序开发接口。应用程序开发接口是面向应用程序开发人员的,而驱动程序开发接口是面向驱动程序开发人员的。 JDBC驱动的分类 JDBC驱动可以分为四类: 1. JDBC-ODBC桥...

    jdbc 练习作业

    3. 实现一个DAO类,封装常用的CRUD(Create、Read、Update、Delete)操作。 4. 学习使用PreparedStatement的参数绑定,防止SQL注入攻击。 5. 熟悉ResultSet的遍历,将结果转换为JavaBean对象列表。 6. 实践数据库...

    jdbc-driver.rar

    Thin驱动是最常用的一种,它是一个轻量级的驱动,不需要Oracle客户端软件,可以直接通过网络与Oracle服务器通信。 接下来,MySQL JDBC驱动程序,也称为Connector/J,是MySQL数据库的官方Java驱动。它遵循JDBC规范...

    JDBC主要api介绍

    首先,JDBC API主要包含在java.sql和javax.sql两个包中。java.sql包是核心包,包含了基本的JDBC功能和类,而javax.sql包则提供了一些扩展功能,如数据源和连接池等。JDBC中最常用的接口和类包括DriverManager、...

    jdbc的常用数据库驱动jar包

    Oracle JDBC驱动分为 Thin 和 OCI两种类型。Thin驱动是纯Java实现,无需Oracle客户端,可以直接通过网络连接到数据库服务器。而OCI驱动则需要本地Oracle客户端安装,它支持更多的特性,但依赖于本地库。在使用...

    JDBC资料文档第一部分

    这种方式效率高且安全性好,是目前最常用的一种JDBC驱动类型。 #### 六、JDBC编程步骤 - **注册一个驱动程序**:注册驱动程序有三种方式: - 方式一:`Class.forName("oracle.jdbc.driver.OracleDriver");` - ...

    常用的jdbc连接数据库架包jar

    3. SQLServer JDBC驱动:Microsoft提供了JDBC驱动,分为两种类型:JDBC Type 4(com.microsoft.sqlserver.jdbc.SQLServerDriver)是纯Java实现,无需依赖本地驱动;而旧版的Type 2驱动需要ODBC桥接。 4. MySQL JDBC...

    常用数据库驱动插件DriverJDBC.zip

    JDBC驱动分为四种类型,从I到IV,其中IV型(即类型4)是纯Java实现,无需服务器端的额外组件,这两个驱动都属于IV型。 4. **连接数据库的步骤**: - 加载驱动:通过`Class.forName()`方法加载对应的JDBC驱动。 - ...

    MySQL&MS SQLServer驱动及常用数据库JDBC连接写法

    `sqlserver`和`mysql`这两个文件名可能分别对应着SQL Server和MySQL数据库的相关配置或使用指南,同样值得参考。 总之,理解和掌握MySQL与SQL Server的JDBC连接方法是Java开发者必备的技能之一,这有助于实现高效、...

    常用数据库JDBC连接写法

    Microsoft SQL Server是微软提供的数据库服务器,有两种不同的JDBC驱动可以使用:jTDS和Microsoft官方驱动。jTDS驱动适用于与Sybase和SQL Server兼容的场景,代码如下: ```java Class.forName(...

Global site tag (gtag.js) - Google Analytics