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; // 没有其它结果
分享到:
相关推荐
在Java Web开发中,JDBC...结合“JDBC常用类和方法.doc”和“JSP白皮书.doc”,我们可以深入学习这两个领域的细节,提高数据库操作和动态网页开发的能力。理解并熟练运用这些知识点,将有助于构建高效、健壮的Web应用。
- JDBC URL 可以有两种格式,一种是使用服务名:jdbc:oracle:thin:@//<host>:<port>/ServiceName,另一种是使用SID:jdbc:oracle:thin:@<host>:<port>:。 3. IBM DB2 JDBC 驱动 - DB2 Universal Driver Type 4 使用...
它分为两个版本: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"中,主要涉及到的是`ojdbc14.jar`和`classes12.jar`这两个驱动包。 1. **ojdbc14.jar**: `ojdbc14.jar`是Oracle 9i的JDBC Type 4驱动程序,也被称为纯Java驱动。它实现了JDBC ...
这两个概念是Spring框架的核心,使你能够解耦代码,提高可测试性和可维护性。 4. **spring-jdbc-3.2.3.RELEASE.jar**: 这是Spring JDBC模块的实现,提供了对JDBC的抽象,包括DataSource的管理、JdbcTemplate、...
在提供的压缩包中,有两个文件:`setup.exe`和`install.txt`。`setup.exe`很可能是安装程序,用于在用户的计算机上安装JDBC驱动。用户需要运行这个可执行文件,按照向导指示完成驱动的安装过程。通常,这会将必要的...
"jtds1.2.4+sqljdbc4.2.0两个jar包文件"是两个常用的数据库连接组件,它们在Java应用中起到了桥梁的作用,帮助程序与数据库进行通信。 首先,`jtds-1.2.4.jar`是JDBC驱动的实现,专门用于连接Microsoft SQL Server...
- **`java.sql`包和`javax.sql`包**:这两个包包含了JDBC的核心类和接口。 - `java.sql`包含基础的JDBC类和接口,如`Connection`, `Statement`, `ResultSet`等。 - `javax.sql`包含高级功能,例如`DataSource`等。...
本压缩包"常用数据库JDBC驱动程序打包下载"提供了三种主流数据库的JDBC驱动,包括Oracle、MySQL和MSSQL,方便开发者一次性获取所需资源,避免了逐个寻找和安装的繁琐过程。 首先,Oracle JDBC驱动,也称为Oracle ...
jTDS是一个开源的SQL Server驱动,支持两种连接方式。以下是使用jTDS的方式: - 第一种: ```java Class.forName("net.sourceforge.jtds.jdbc.Driver"); Connection cn = DriverManager.getConnection( "jdbc:...
JDBC API可以分为两类:应用程序开发接口和驱动程序开发接口。应用程序开发接口是面向应用程序开发人员的,而驱动程序开发接口是面向驱动程序开发人员的。 JDBC驱动的分类 JDBC驱动可以分为四类: 1. JDBC-ODBC桥...
3. 实现一个DAO类,封装常用的CRUD(Create、Read、Update、Delete)操作。 4. 学习使用PreparedStatement的参数绑定,防止SQL注入攻击。 5. 熟悉ResultSet的遍历,将结果转换为JavaBean对象列表。 6. 实践数据库...
Thin驱动是最常用的一种,它是一个轻量级的驱动,不需要Oracle客户端软件,可以直接通过网络与Oracle服务器通信。 接下来,MySQL JDBC驱动程序,也称为Connector/J,是MySQL数据库的官方Java驱动。它遵循JDBC规范...
首先,JDBC API主要包含在java.sql和javax.sql两个包中。java.sql包是核心包,包含了基本的JDBC功能和类,而javax.sql包则提供了一些扩展功能,如数据源和连接池等。JDBC中最常用的接口和类包括DriverManager、...
Oracle JDBC驱动分为 Thin 和 OCI两种类型。Thin驱动是纯Java实现,无需Oracle客户端,可以直接通过网络连接到数据库服务器。而OCI驱动则需要本地Oracle客户端安装,它支持更多的特性,但依赖于本地库。在使用...
这种方式效率高且安全性好,是目前最常用的一种JDBC驱动类型。 #### 六、JDBC编程步骤 - **注册一个驱动程序**:注册驱动程序有三种方式: - 方式一:`Class.forName("oracle.jdbc.driver.OracleDriver");` - ...
3. SQLServer JDBC驱动:Microsoft提供了JDBC驱动,分为两种类型:JDBC Type 4(com.microsoft.sqlserver.jdbc.SQLServerDriver)是纯Java实现,无需依赖本地驱动;而旧版的Type 2驱动需要ODBC桥接。 4. MySQL JDBC...
JDBC驱动分为四种类型,从I到IV,其中IV型(即类型4)是纯Java实现,无需服务器端的额外组件,这两个驱动都属于IV型。 4. **连接数据库的步骤**: - 加载驱动:通过`Class.forName()`方法加载对应的JDBC驱动。 - ...
`sqlserver`和`mysql`这两个文件名可能分别对应着SQL Server和MySQL数据库的相关配置或使用指南,同样值得参考。 总之,理解和掌握MySQL与SQL Server的JDBC连接方法是Java开发者必备的技能之一,这有助于实现高效、...
Microsoft SQL Server是微软提供的数据库服务器,有两种不同的JDBC驱动可以使用:jTDS和Microsoft官方驱动。jTDS驱动适用于与Sybase和SQL Server兼容的场景,代码如下: ```java Class.forName(...