JAVA學習筆記17:JDBC Driver

摘錄了一些代碼片段,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();
        }
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章