H2DBEngine——Driver的设计与实现

首先,我们通过下面的代码看一下JDBC是如何使用Driver的。

Connection conn = null;
String driver = "oracle.jdbc.driver.OracleDriver";
Class.forName(driver);
String jdbcUrl = "jdbc:oracle:thin:@localhost:1521:ORCL";
String user = "toddt";
String password = "mypwd";
conn = DriverManager.getConnection(jdbcUrl,user,password);

 从本段代码我们可以看出,使用JDBC时,首先需要将数据库对应的Driver加载到JVM当中;然后通过DriverManager获取到数据库的连接。下面,我们看一下在H2数据库中Driver是如何实现的。

H2 Driver类实现了java.sql.Driver接口,表明其为JDBC Driver。该类包含了一个static代码段,该段代码在执行Class.forName()时会自动执行即自动执行load方法。

static {

        load();

    }

load()方法起到了一个非常重要的作用:将Driver本身的一个实例(object)注册到DriverManager。该方法在DriverDriverManager之间构造了一道桥梁。当DriverManger.getConnection时,会调用Driver的方法生成一个到数据库的Connection

// Driver INSTANCE = new Driver();
 public static synchronized Driver load() {
        try {
            if (!registered) {
                registered = true;
                DriverManager.registerDriver(INSTANCE);//
            }
        } catch (SQLException e) {
            TraceSystem.traceThrowable(e);
        }
        return INSTANCE;
    }


Driver的另一个重要作用是获得到数据库的连接(Connection),在该类中由另外一个方法具体完成该功能:

public Connection connect(String url, Properties info) throws SQLException {
        try {
            if (info == null) {
                info = new Properties();
            }
            if (!acceptsURL(url)) {
                return null;
            }
            if (url.equals(DEFAULT_URL)) {
                return DEFAULT_CONNECTION.get();
            }
            Connection c = DbUpgrade.connectOrUpgrade(url, info);
            if (c != null) {
                return c;
            }
            return new JdbcConnection(url, info);
        } catch (Exception e) {
            throw DbException.toSQLException(e);
        }
    }


综上,Driver主要有两个作用,一是将Driver本身注册到DriverManager;另外一个是负责获取到数据库的连接。

你可能感兴趣的:(数据库,jdbc,DriverManager)