JDBC学习--JDBC驱动程序(来自博客园)
JDBC驱动程序
JDBC通过一系列接口来访问数据库,而这些接口的实现则是由不同的数据库厂商或组织实现的。要实现对某一特定类型数据库的访问就要通过注册JDBC驱动程序来让程序知道去哪里调用JDBC API 接口的实现。
先看下面的一段程序:
Class.froName("com.mysql.jdbc.Driver").newInstance();//加载类并初始化这个类的静态初始化部分
String url = "jdbc:mysql://localhost:3306/math"; //数据库URL
String userName = "root"; //连接数据库的用户名
String password = "password"; //密码
Connection oConn = DriverManager.getConnection(url,userName,password);//建立数据库连接java.sql.DriverManager:从名字就可以看出是用于驱动程序管理的,它的主要责任是保留一个驱动程序的列表,并通过getConnection方法来给应用程序提供与所请求的URL相匹配的Driver(可能是由于同一个数据库的驱动程序可能是有几种不同的实现方式,但如果DriverManager中对一个URL有多个匹配的Driver,它是不是只选择第一个找到的呢?),并返回Connection对象,如果找不到就会抛出一个异常,也就是这一句 Connection oConn = DriverManager.getConnection(url,userName,password)。同时还提供了registerDriver()和deregisterDriver(),这两个方法允许驱动程序的工具用DriverManager注册驱动程序或从列表中删除。可以感觉出是在用Class.froName("com.mysql.jdbc.Driver").newInstance();加载类并初始化这个类的静态初始化部分时调用registerDriver()的方法注册的,我在mysql驱动程序的源码的Driver类中找到对这个方法的调用。
package com.mysql.jdbc;
public class Driver extends NonRegisteringDriver {

//
// Register ourselves with the DriverManager
//
static {
try {
java.sql.DriverManager.registerDriver(new Driver());
} catch (java.sql.SQLException E) {
throw new RuntimeException("Can't register driver!");
}
if (DEBUG) {
Debug.trace("ALL");
}
}
/**
* Construct a new driver and register it with DriverManager
*
* @throws java.sql.SQLException if a database error occurs.
*/
public Driver() throws java.sql.SQLException {
// Required for Class.forName().newInstance()
}
}



浙公网安备 33010602011771号