JDBC基本教程之驱动配置
1、概述
DriverManager 类是 JDBC 的打点层,浸染于用户和驱动措施之间。它跟踪可用的驱动措施,并在数据库和相应驱动措施之间成立毗连。别的,DriverManager 类也处理惩罚诸如驱动措施登录时间限制及登录和跟踪动静的显示等事务。
对付简朴的应用措施,一般措施员需要在此类中直接利用的独一要领是 DriverManager.getConnection。正如名称所示,该要领将成立与数据库的毗连。JDBC 答允用户挪用 DriverManager 的要领 getDriver、getDrivers 和 registerDriver 及 Driver 的要领 connect。但大都环境下,让 DriverManager 类打点成立毗连的细节为上策。
1、跟踪可用驱动措施
DriverManager 类包括一列 Driver 类,它们已通过挪用要领 DriverManager.registerDriver 对本身举办了注册。所有 Driver 类都必需包括有一个静态部门。它建设该类的实例,然后在加载该实例时 DriverManager 类举办注册。这样,用户正常环境下将不会直接挪用 DriverManager.registerDriver;而是在加载驱动措施时由驱动措施自动挪用。加载 Driver 类,然后自动在 DriverManager 中注册的方法有两种:
通过挪用要领 Class.forName。这将显式地加载驱动措施类。由于这与外部配置无关,因此推荐利用这种加载驱动措施的要领。以下代码加载类 acme.db.Driver:
Class.forName("acme.db.Driver");
假如将 acme.db.Driver 编写为加载时建设实例,并挪用以该实例为参数的 DriverManager.registerDriver(本该如此),则它在 DriverManager 的驱动措施列表中,并可用于建设毗连。
通过将驱动措施添加到 java.lang.System 的属性 jdbc.drivers 中。这是一个由 DriverManager 类加载的驱动措施类名的列表,由冒号脱离:初始化 DriverManager 类时,它搜索系统属性 jdbc.drivers,假如用户已输入了一个或多个驱动措施,则 DriverManager 类将试图加载它们。以下代码说明措施员如安在 ~/.hotjava/properties 中输入三个驱动措施类(启动时,HotJava 将把它加载到系统属性列表中):
jdbc.drivers=foo.bah.Driver:wombat.sql.Driver:bad.test.ourDriver;
对 DriverManager 要领的第一次挪用将自动加载这些驱动措施类。
留意:加载驱动措施的第二种要领需要耐久的预设情况。假如对这一点不能担保,则挪用要领 Class.forName 显式地加载每个驱动措施就显得更为安详。这也是引入特定驱动措施的要领,因为一旦 DriverManager 类被初始化,它将不再查抄 jdbc.drivers 属性列表。
在以上两种环境中,新加载的 Driver 类都要通过挪用 DriverManager.registerDriver 类举办自我注册。如上所述,加载类时将自动执行这一进程。
由于安详方面的原因,JDBC 打点层将跟踪哪个类加载器提供哪个驱动措施。这样,当 DriverManager 类打开毗连时,它仅利用当地文件系统或与发出毗连请求的代码沟通的类加载器提供的驱动措施。
2、成立毗连
加载 Driver 类并在 DriverManager 类中注册后,它们即可用来与数据库成立毗连。当挪用 DriverManager.getConnection 要领发出毗连请求时,DriverManager 将查抄每个驱动措施,查察它是否可以成立毗连。
有时大概有多个 JDBC 驱动措施可以与给定的 URL 毗连。譬喻,与给定长途数据库毗连时,可以利用 JDBC-ODBC 桥驱动措施、JDBC 到通用网络协议驱动措施或数据库厂商提供的驱动措施。在这种环境下,测试驱动措施的顺序至关重要,因为 DriverManager 将利用它所找到的第一个可以乐成毗连到给定 URL 的驱动措施。
首先 DriverManager 试图按注册的顺序利用每个驱动措施(jdbc.drivers 中列出的驱动措施老是先注册)。它将跳过代码不行信任的驱动措施,除非加载它们的源与试图打开毗连的代码的源沟通。
它通过轮番在每个驱动措施上挪用要领 Driver.connect,并向它们通报用户开始通报给要领 DriverManager.getConnection 的 URL 来对驱动措施举办测试,然后毗连第一个认出该 URL 的驱动措施。
这种要领初看起来效率不高,但由于不行能同时加载数十个驱动措施,因此每次毗连实际只需几个进程挪用和字符串较量。
以下代码是凡是环境下用驱动措施(譬喻 JDBC-ODBC 桥驱动措施)成立毗连所需所有步调的示例:
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); //加载驱动措施
String url = "jdbc:odbc:fred";
DriverManager.getConnection(url, "userID", "passwd");