如果你有翻阅java API文档的习惯的话,你就会发现,jdbc API中接口占了大多数。不同的jdbc驱动开发者提供了实现必要接口的类。开发商之间的不断竞争就为我们提供了多种jdbc驱动。
点击这里你会方便的获得很多公司提供的jdbc驱动。
从编程的角度出发,有两个主要的类负责建立与数据库的连接。
第一个类是 DriverManager,它是在 JDBC API 中提供的为数不多的实际类之一。DriverManager 负责管理已注册驱动程序的集合,实质上就是提取使用驱动程序的细节,这样程序员就不必直接处理它们。
第二个类是实际的 JDBC Driver 类。这些是由独立厂商提供的。JDBC Driver 类负责建立数据库连接和处理所有与数据库的通讯。
在所有java程序与数据库之间创建连接的过程的第一步是在jvm中注册jdbc驱动。在传统的连接机制(相对于后面中讨论的 DataSource 连接机制)中,连接和所有数据库通讯是由 DriverManager 对象控制的。要建立一个连接,必须用 DriverManager 对象注册针对目标数据库的适当的 JDBC 驱动程序。
JDBC 规范规定了 JDBC 驱动程序在装入 JVM 时应该自动用 DriverManager 对象注册自身。例如,下面的代码段使用一个静态的初始化程序来首先创建一个 persistentjava JDBC 驱动程序的实例,然后用 DriverManager 将其注册。
static {
java.sql.DriverManager.registerDriver(new com.persistentjava.JdbcDriver()) ;
}
注册驱动程序就是将驱动程序类装入 JVM 的工作,它可以用几种不同的方法完成。一种方法就是使用类调用器(ClassLoader)Class.forName(yourDriver);。另一种方法不太常见,是使用 jdbc.drivers 系统属性。这种方法可以有三种不同的方式:
从命令行:
java -Djdb.drivers=com.persistentjava.JdbcDriver Connect
在 java 应用程序中:
System.setProperty("jdbc.drivers", "com.persistentjava.JdbcDriver") ;
通过在系统属性文件中设置 jdbc.drivers 属性,这通常和系统有关。通过用冒号隔离驱动程序,多个驱动程序可以使用上面提到的系统属性方法注册。使用系统属性方法的一个好处是驱动程序很容易在 JVM 中调入和调出,而不用修改任何代码或修改最少的代码。如果注册了多个驱动程序,它们的优先顺序是:
1)JVM 初始化时通过 jdbc.drivers 属性注册的 JDBC 驱动程序,
2)动态装入的 JDBC 驱动程序。
因为 jdbc.drivers 属性只在 DriverManager() 方法的第一次调用时检查一次,确保所有驱动程序在建立数据库连接之前被正确注册是很重要的。
然而,不是所有的 JVM 都平等创建,一些 JVM 并不符合 JVM 规范。结果是,静态初始化程序并不如预期的那样运行。这导致了注册 JDBC 驱动程序的多种方法,包括:
Class.forName("com.persistentjava.JdbcDriver").newInstance() ;
DriverManager.registerDriver(new com.persistentjava.JdbcDriver()) ;这些替代方案应该在所有 JVM 中都运行良好,所以您应该放心地在众多可能出现的 JVM 中使用它们工作。最后一个问题是 Class.forname() 可能抛出一个 ClassNotFoundException,所以您需要在合适的异常处理程序中包装注册代码。
一旦 JDBC 驱动程序用 DriverManager 注册了,就可以用于建立到数据库的连接。但是很多不同的驱动程序都可能被实际注册过,DriverManager 怎样选择正确的驱动程序呢?方法非常简单:每个 JDBC 驱动程序使用一个专门的 JDBC URL作为自我标识的一种方法,他的格式和web地址挺相似。URL 的格式是直观的:jdbc:sub-protocol:database locator。子协议(sub-protocol)与 JDBC 驱动程序有关,可以是 odbc、oracle、db2 等等,根据实际的 JDBC 驱动程序厂商而不同。数据库定位器(database locator)是与驱动程序有关的指示器,用于唯一指定应用程序要和哪个数据库进行交互。根据驱动程序的类型,该定位器可能包括主机名、端口和数据库系统名。
当提供了具体的 URL 之后,DriverManager 在已注册的驱动程序集合中循环,直到其中一个驱动程序识别出指定的 URL。如果没有发现适合的驱动程序,就抛出一个 SQLException。下面的清单说明了几个实际 JDBC URL 的具体示例:
jdbc: odbc:jdbc
jdbc: oracle:thin:@persistentjava.com:1521:jdbc";
jdbc:db2:jdbc很多驱动程序(包括 JDBC-ODBC 桥驱动程序)接受在 URL 末尾的附加参数,如用户名和密码。
给定具体的 JDBC URL,获取数据库连接的方法就是在 DriverManager 对象上调用 getConnection()。这种方法有几种形式:
DriverManager.getConnection(url) ;
DriverManager.getConnection(url, username, password) ;
DriverManager.getConnection(url, dbproperties) ;在这里,url 是一个 String 对象,也就是 JDBC URL;用户名和密码是 String 对象,它们是 JDBC 应用程序要用来连接到数据源的用户名和密码;而 dbproperties 是一个包括所有参数(可能包括用户名和密码)的 Java properties 对象,JDBC 驱动程序需要这些参数作成功的连接。
看到这里,你已经成功的在你即将诞生的java程序和数据库之间建立起了沟通的桥梁。
你知道jdbc驱动有几种类型吗?下节课我们来一探究竟……
各位看官感想如何?感觉还行的话我会连载下去的。