摘录了一些代码片段,java.sql.DriverManager类包含了一个static属性和一个static方法,这个static属性是一个集合,而static方法的作用是将java.sql.Driver接口的子类对象添加进这个集合,驱动程序就是java.sql.Driver接口的子类,由各数据库厂商提供,每个子类中都包含一个static代码块,代码块中通过DriverManager类直接调用其static方法传入一个本类的实例化对象,只要一个驱动程序被加载就会执行其static代码块,DriverManager类中也就包含了该驱动程序的实例化对象了,然后"Attempts to establish a connection to the given database URL. The DriverManager attempts to select an appropriate driver from the set of registered JDBC drivers."(试图建立到给定数据库URL的连接。DriverManager试图从已注册的JDBC驱动程序集中选择一个适当的驱动程序。)
package org.gjt.mm.mysql;
import java.sql.SQLException;
public class Driver extends com.mysql.jdbc.Driver{
public Driver() throws SQLException{
super();
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
package com.mysql.jdbc;
import java.sql.SQLException;
public class Driver extends NonRegisteringDriver implements java.sql.Driver{
static{
try{
java.sql.DriverManager.registerDriver(new Driver());
}catch(SQLException E){
throw new RuntimeException("Can't register driver!");
}
}
public Driver() throws SQLException{}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
package java.sql;
import java.util.concurrent.CopyOnWriteArrayList;
public class DriverManager{
// List of registered JDBC drivers
private final static CopyOnWriteArrayList<DriverInfo> registeredDrivers = new CopyOnWriteArrayList<>();
public static synchronized void registerDriver(java.sql.Driver driver) throws SQLException{
registerDriver(driver, null);
}
public static synchronized void registerDriver(java.sql.Driver driver,DriverAction da) throws SQLException{
if(driver!=null){
registeredDrivers.addIfAbsent(new DriverInfo(driver,da));
}else{
throw new NullPointerException();
}
}
}