1. 什么是 JDBC 3.0 API?
JDBC 3.0 API 是 JDBC API 的最后更新。它包含了许多特性,包括可滚动的结果集和 SQL:1999 数据类型。
2. JDBC-ODBC Bridge 是否支持 JDBC 3.0 API 中的新特性?
JDBC-ODBC Bridge 提供了 JDBC 3.0 API 的有限子集。
3. JDBC-ODBC Bridge 是否可以与 applet 一起使用?
运行于浏览器(比如 Netscape Navigator)中的不受信任的 applet 不允许使用 JDBC-ODBC Bridge。JDBC-ODBC
Bridge 不允许不受信任的代码出于安全方面的考虑而调用它。这是好的方面,因为它表明由浏览器下载的不受信任 applet 不会通过调用
ODBC 来回避 Java 安全。 记住 ODBC 是本机代码,所以一旦调用 ODBC,Java 编程语言就不能保证安全冲突不会发生。另一方面,Pure
Java JDBC 驱动程序与 applet 一起工作得很好。它们是完全可以下载的,而且不要求任何的客户端配置。
最后,我想提一下的是,可以将 JDBC-ODBC Bridge 与 applet 一起使用,因为 applet 浏览器假定 applet
是受信任的,因此,applet 会在 applet 浏览器中运行。通常关闭 applet 安全是危险的,但在某些经过控制的场合,比如对于只在安全
Intranet 环境中使用的 applet,它可能是合适的。记住如果您选择这个选项,就会碰到警告,一有可能避免安全问题,就使用全
Java (all-Java) JDBC 驱动程序。
4. 我怎样开始调试与 JDBC API 有关的问题?
找出 JDBC 调用正在做什么的一个好的办法是启用 JDBC 跟踪。JDBC 跟踪包含活动的详细列表,这些活动发生在与 JDBC
操作有关的系统中。
如果您使用 DriverManager 工具包来创建数据库连接,就使用 DriverManager.setLogWriter
方法来启用 JDBC 操作的跟踪。如果您使用 DataSource 对象来获取连接,就使用 DataSource.setLogWriter
方法来启用跟踪。(对于集中连接,您使用 ConnectionPoolDataSource.setLogWriter
方法;对于参与分布式事务的连接,使用 XADataSource.setLogWriter 方法。)
5. 我如何可以使用 JDBC API 通过网络访问像 Microsoft Access 这样的桌面数据库?
目前多数桌面数据库要求使用 ODBC 支配的 JDBC 解决方案。这是因为这些数据库产品的供应商还没有实现全 Java JDBC
驱动程序。
最佳办法是使用支持想用的 ODBC 和数据库的商业 JDBC 驱动程序。参见 JDBC
驱动程序页面,获取可用的 JDBC 驱动程序列表。
来自 Sun Java Software 的 JDBC-ODBC Bridge 没有单独提供对桌面数据库的访问。JDBC-ODBC
Bridge 将 ODBC 作为本地 DLL 加载,而且针对桌面数据库(如 Access)的典型 ODBC 驱动器不在网络上。不过,JDBC-ODBC
Bridge 可以与 RMI-JDBC Bridge
一起使用,以便通过网络访问像 Access 这样的数据库。 这种 RMI-JDBC-ODBC 解决方案是免费的。
6. 有哪些可用的支持 JDBC 技术的驱动程序?
参阅 有关支持
JDBC 技术驱动程序的 Web 页,获取当前可用的驱动程序列表。
7. 有哪些可用的 JDBC API 文档?
参阅 JDBC 技术主页,该页面中有一些链接指向有关
JDBC 技术的信息。这个页面链接到有关特性和优点的信息、一系列新特性、有关入门介绍的一节、在线教程和有关驱动程序要求的一节等信息,它还链接到规范和
javadoc 文档。
8. 是否有不可与 JDBC-ODBC Bridge 一起工作的 ODBC 驱动程序?
多数 ODBC 2.0 驱动程序应当与 Bridge 一起工作。由于 ODBC 驱动程序之间在功能上有一些区别,因此 Bridge
的功能可能会受到影响。Bridge 与流行的 PC 数据库一起工作,比如 Microsoft Access 和 FoxPro。
9. 什么会引起“No suitable driver”(没有合适的驱动程序)错误?
在调用 DriverManager.getConnection 方法期间,经常会出现“No suitable
driver”的错误。 原因可能是在调用 getConnection 方法之前,加载合适的 JDBC 驱动程序失败,或者它可能正在指定一个非法的
JDBC URL——一个不被 JDBC 驱动程序识别的 URL。最好的办法是检查 JDBC 驱动程序的文档或联系您的 JDBC 驱动程序供应商,前提是您怀疑正在指定不被
JDBC 驱动程序识别的 URL。
此外,当您正在使用 JDBC-ODBC Bridge 时,如果不能加载 Bridge 所需的一个或多个共享库,这种错误就可能发生。如果您认为这是原因所在,就检查您的配置,以确保
Bridge 能够访问共享库。
12. 为什么 ODBC 驱动程序管理器会返回“Data source name not found
and no default driver specified Vendor: 0”(数据源名称没有找到并且没有默认的驱动程序指定供应商:0)?
在尝试使用 Bridge 连接到数据库期间,这种类型的错误就可能发生。首先,请注意错误是来自 ODBC 驱动程序管理器。这表明 Bridge——普通的
ODBC 客户端——已经成功调用 ODBC,因此问题不是由于本地库不存在而导致的。在这种情形下,它表明错误是由于如下事实而导致的:需要在客户计算机上配置
ODBC DSN(数据源名称)。开发人员经常会忘记这样做,认为 Bridge 应该会找到远程服务器计算机上配置的 DSN。
13. 是否所有需要的 JDBC 驱动程序都将创建到 JDK 的数据库部分的连接?
不是。除了 JDBC-ODBC Bridge 外,没有任何的支持 JDBC 技术的驱动程序与 JDK 1.1.x 或 Java 2
Platform 版本捆绑在一起。因此,开发人员需要获取驱动程序并安装它,然后才可以连接到数据库。我们正在考虑在将来捆绑支持 JDBC
技术的驱动程序。
14. JDBC-ODBC Bridge 是多线程的吗?
不是。JDBC-ODBC Bridge 不支持来自不同线程的并发访问。JDBC-ODBC Bridge 使用同步方法来序列化它对
ODBC 的所有调用。多线程 Java 程序可以使用 Bridge,但它们不能得到多线程的优点。此外,死锁可能在数据库持有的锁和 Bridge
使用的信号 (semaphore) 之间发生。我们正考虑将来删除同步方法。原来添加它们的目的是,使得对于编写使用单线程 ODBC 驱动程序的
Java 程序的人员来说,事情变得简单了。
15. JDBC-ODBC Bridge 是否在每个连接中支持多个并发的打开语句?
不是。当使用 JDBC-ODBC Bridge 时,每个连接只能打开一个 Statement 对象。
16. 当 next 方法工作时,我为什么不能调用 ResultSet
方法 afterLast 和 beforeFirst?
您可能正在使用针对 JDBC 1.0 API 实现的驱动程序。需要升级到 JDBC 2.0 驱动程序,它实现了可滚动结果集。同时保证了代码已经创建可滚动结果集,并且正在使用的
DBMS 支持它们。
17. 我如何可以检索 String 或其他对象类型,而不用每次创建一个新的对象?
不必要地创建潜在的大量对象(数百万),并对它们进行垃圾收集处理,这才可能真正影响到性能。下面这种方法可能会比较好:使用 JDBC
API ,而不是总分配新的对象来检索像字符串这样的数据。
我们正在研究这个主题,确定在某些地方是否应该改善 JDBC API。以后可能会有这方面的信息。此外,如果您有关于这个问题的任何评论,也请发送给我们。