JDBC基础教程之驱动设置
1.概观
DriverManager类是JDBC的管理层,作用于用户和驱动之间。它跟踪可用的驱动程序,并在数据库和相应的驱动程序之间建立连接。此外,DriverManager类还处理驱动程序登录时间的限制以及登录和跟踪消息的显示等事务。
对于简单的应用,一般程序员需要在这个类中直接使用的方法是DriverManager.getConnection顾名思义,这个方法会建立到数据库的连接。JDBC允许用户调用驱动程序管理器的方法getDriver、getDrivers、registerDriver和connect。然而,在大多数情况下,最好让DriverManager类管理建立连接的细节。
1.跟踪可用的驱动程序。
DriverManager类包含一个驱动程序类列表,这些驱动程序类通过调用DriverManager.registerDriver方法进行注册。所有驱动程序类都必须包含一个静态部分。它创建该类的一个实例,然后在加载该实例时注册DriverManager类。这样用户就不会直接调用driver manager . register 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 . our driver;
对DriverManager方法的第一次调用将自动加载这些驱动程序类。
注意:第二种加载驱动程序的方法需要一个持久的预设环境。如果不能保证这一点,调用Class.forName方法显式加载每个驱动程序会更安全。这也是引入特定驱动程序的方法,因为一旦DriverManager类被初始化,它将不再检查jdbc.drivers属性列表。
在这两种情况下,新加载的驱动程序类都需要通过调用DriverManager.registerDriver类来注册自己。如上所述,这个过程将在类加载时自动执行。
出于安全原因,JDBC管理将跟踪哪个类加载器提供哪个驱动程序。这样,当DriverManager类打开一个连接时,它只使用本地文件系统提供的驱动程序或与连接请求代码相同的类加载器。
2.建立联系
在DriverManager类中加载并注册了驱动程序类之后,可以使用它们来建立与数据库的连接。当调用DriverManager.getConnection方法进行连接请求时,DriverManager会检查每个驱动程序,看是否可以建立连接。
有时可能有多个JDBC驱动程序可以连接到一个给定的URL。例如,当连接到给定的远程数据库时,可以使用ODBCODBC桥驱动程序、JDBC-通用网络协议驱动程序或数据库供应商提供的驱动程序。在这种情况下,测试驱动程序的顺序至关重要,因为DriverManager将使用它找到的第一个可以成功连接到给定URL的驱动程序。
首先,DriverManager尝试按照注册的顺序使用每个驱动程序(jdbc.drivers中列出的驱动程序总是首先注册)。它将跳过代码不可信的驱动程序,除非它们与试图打开连接的代码来自同一个源。
它通过依次调用每个驱动程序上的方法Driver.connect来测试驱动程序,并将用户开始传递的URL传递给方法DriverManager.getConnection,然后连接第一个识别该URL的驱动程序。
乍一看,这种方法效率很低,但由于不可能同时加载几十个驱动程序,所以每个连接实际上只需要几个过程调用和字符串比较。
以下代码是建立与驱动程序(如JDBC-ODBC桥驱动程序)连接所需的所有步骤的一般示例:
class . forname(" sun . JDBC . odbc . JDBC odbc driver ");//加载驱动程序
string URL = "JDBC: odbc:弗雷德";
driver manager . getconnection(URL," userID "," passwd ");
0条评论