目录 | 上一页 | 下一页 JDBCTM 指南:入门


11 说明

我们已经收到了数个请求,要求阐明 JDBC API 的某些方面。本章包含了部分 JDBC 特性的附加解释。

11.1 Connection.isClosed()

Connection.isClosed() 方法只保证在调用 Connection.closed() 之后才返回真。通常不能调用 Connection.isClosed() 方法来确定数据库连接是有效还是无效。典型的 JDBC 客户机通过捕捉尝试 JDBC 操作时所抛出的异常来确定连接是否有效。

11.2 Statement.setCursorName()

Statement.setCursorName() 方法为应用程序提供了一种为与某语句所生成的下一个结果集相关联的光标指定光标名称的途径。通过调用 ResultSet.getCursorName() 可以检索到结果集的光标名称。如果在创建结果集之前调用 Statement.setCursorName(),则 ResultSet.getCursorName() 应该总是返回在 Statement.setCursorName() 中指定的值。

我们注意到:创建结果集之前调用 Statement.setCursorName() 并不意味着结果集是可更新的。换句话说,即使调用 Statement.setCursorName(),也不一定允许定位更新或删除。根据 JDBC 中的缺省设置,结果集是只读的。

在 JDBC 中,光标名称唯一用途是嵌入到如下形式的 SQL 语句中:

UPDATE ... WHERE CURRENT OF <cursor>

光标名称提供了一个进行定位更新或删除的途径。要在结果集上启用定位更新和删除,请使用以下形式的选择查询

SELECT FOR UPDATE ... FROM ... WHERE ...

来创建结果集。如果没有调用 Statement.setCursorName() 来指定光标名称,则 JDBC 驱动程序或基本 DBMS 必须在执行 SELECT FOR UPDATE 语句时生成光标名称(如果支持定位更新/删除)。如果结果集是只读的,且没有调用 Statement.setCursorName() 来指定光标名称,则 ResultSet.getCursorName() 应该返回 null

11.3 字符转换

用户都期望 JDBC 驱动程序实现能够在字符串/字符的 Java unicode 编码和所访问的数据库的字符编码之间进行自动转换。JDBC 没有定义如何覆盖数据库的字符编码。例如,JDBC 没有定义如何在 ASCII 数据库中存储 unicode 字符。

11.4 流作为输入参数

当应用程序经由 setXXX() 或 updateXXX() 方法将流作为输入值进行传递时,应用程序有责任将流保持在可读状态,直到调用以下方法之一:PreparedStatement.execute()、executeQuery()、executeUpdate() 或 executeBatch(),以及 ResultSet.insertRow() 或 updateRow()。JDBC 驱动程序不必等到调用这些方法就能读取流值。

11.5 非由 Statement 创建的结果集

元数据操作所创建的 ResultSet 对象只需是只转发类型的。DatabaseMetaData 操作所生成的结果集并不需要具有可滚动性。



目录 | 上一页 | 下一页


jdbc@eng.sun.comjdbc-business@eng.sun.com

版权所有 © 1996, 1997 Sun Microsystems, Inc. 保留所有权利