JDBCTM 指南:入门3 - DriverManager

网络推广 2025-04-16 07:15www.168986.cn网络推广竞价

DriverManager3.1 概述

DriverManager 类是 JDBC 的核心管理层,它在用户和数据库驱动程序之间搭建了一座桥梁。它担当着“调度员”的角色,跟踪所有可用的数据库驱动程序,并在用户和特定的数据库驱动程序之间建立连接。除此之外,DriverManager 类还负责管理一些其他事务,如驱动程序的使用时间限制、登录信息的显示以及跟踪消息的传递等。

对于大多数简单的应用程序来说,程序员需要直接使用的 DriverManager 类中的唯一方法就是 DriverManager.getConnection。这个方法的主要作用就是建立与数据库的连接。JDBC API 允许用户调用 DriverManager 的其他方法,如 getDriver、getDrivers 和 registerDriver,以及 Driver 类的 connect 方法。通常建议让 DriverManager 类自行管理建立连接的细节。

3.1.1 跟踪可用驱动程序

DriverManager 类内部维护了一个 Driver 类的列表,这些 Driver 类已经通过调用方法 DriverManager.registerDriver 进行了注册。所有的 Driver 类都需要包含一个静态部分,这个部分在创建该类的实例时会被调用,并在加载该实例时自动在 DriverManager 类中进行注册。用户通常不会直接调用 DriverManager.registerDriver 方法,而是在加载驱动程序时由驱动程序自动完成注册。

加载 Driver 类并在 DriverManager 中注册的方式有两种。第一种是通过调用方法 Class.forName,这种方式会显式地加载驱动程序类。由于这种方式与外部环境无关,因此推荐使用这种方法。例如,下面的代码加载了类 acme.db.Driver:

```java

Class.forName("acme.db.Driver");

```

如果 acme.db.Driver 类在加载时创建实例,并调用以该实例为参数的 DriverManager.registerDriver 方法(这是自动的),那么这个类就会被添加到 DriverManager 的驱动程序列表中,可以用于创建连接。

DriverManager 会在初始化时搜索系统属性 jdbc.drivers,这个属性包含由冒号分隔的驱动程序类名列表。如果用户已经输入了一个或多个驱动程序,那么 DriverManager 会试图加载它们。例如,下面的代码展示了程序员如何在 ~/.hotjava/properties 文件中输入三个驱动程序类:

```java

jdbc.drivers=foo.bah.Driver:wombat.sql.Driver:bad.test.ourDriver;

```

当对 DriverManager 方法的第一次调用发生时,这些驱动程序类将被自动加载。如果无法保证这一点,那么显式地通过调用 Class.forName 方法来加载每个驱动程序可能会更加安全。这是因为一旦 DriverManager 类被初始化,它将不再检查 jdbc.drivers 属性列表。无论哪种情况,新加载的 Driver 类都需要通过调用 DriverManager.registerDriver 方法进行自我注册。这个过程在加载类时会自动完成。出于安全考虑,JDBC 管理层会跟踪哪个类加载器提供了哪个驱动程序。这样,当 DriverManager 打开连接时,只会使用本地文件系统或与发出连接请求的代码相同的类加载器提供的驱动程序。

3.1.2 建立连接

一旦 Driver 类被加载并在 DriverManager 中注册后,就可以用来与数据库建立连接了。当调用 DriverManager.getConnection 方法发出连接请求时,DriverManager 会检查每个驱动程序,查看它是否能够建立连接。在某些情况下,可能存在多个 JDBC 驱动程序都可以连接到给定的 URL。例如,连接到远程数据库时,可以选择使用 JDBC-ODBC 桥驱动程序、JDBC 到通用网络协议驱动程序或特定的数据库厂商提供的驱动程序。在这种情况下,驱动程序的测试顺序至关重要,因为 DriverManager 会使用第一个能够成功连接到给定 URL 的驱动程序。DriverManager 会按照驱动程序的注册顺序尝试连接(jdbc.drivers 中列出的驱动程序会优先注册)。它会跳过不信任的驱动程序,除非加载它们的源与尝试打开连接的代码的源相同。这使得数据库连接更加灵活和安全。在这个独特的系统中,它通过逐一尝试与各种驱动程序建立连接来验证连接的有效性。每个驱动程序都会收到一个调用,方法名为“Driver.connect”,同时传递的是用户最初通过“DriverManager.getConnection”方法提供的URL。虽然这种方法在初看似乎效率不高,但实际上,由于系统不会同时加载数十个驱动程序,因此每次连接的过程仅涉及少量的程序调用和简单的字符串比较。

以下是典型的数据库连接示例代码,其中包含了使用JDBC-ODBC桥驱动程序建立连接的所有步骤。需要加载驱动程序,然后提供数据库URL以建立连接,接着输入用户名和密码以完成身份验证。整个过程如下:

程序会执行以下代码来加载驱动程序:

```java

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); //加载驱动程序

```

接下来,定义数据库的URL:

```scss

String url = "jdbc:odbc:fred"; // 数据库URL

```

然后,通过调用“DriverManager.getConnection”方法,传入URL、用户名和密码来建立数据库连接:

```scss

DriverManager.getConnection(url, "userID", "passwd"); // 建立数据库连接

```

请注意,这里提到的所有操作都是在系统默认设置的背景下进行的,比如通过特定的数据库驱动程序和URL来建立连接。具体的实现细节可能会因不同的数据库类型和配置而有所不同。无论使用哪种数据库或配置,这个过程的核心思路都是一致的:即尝试与各种驱动程序建立连接,直到找到能够成功识别的驱动程序为止。这就是我们的系统如何确保用户能够顺利连接到数据库的。在这个过程中,“cambrian.render('body')”这个代码片段似乎并未在上下文中明确其作用或位置,可能是特定环境或应用特有的部分,但在常规的数据库连接流程中并未提及。

上一篇:js实现顶部可折叠的菜单工具栏效果实例 下一篇:没有了

Copyright © 2016-2025 www.168986.cn 狼蚁网络 版权所有 Power by