时间紧张,先记一笔,后续优化与完善。
首先,我们通过上面的码代看一下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。该方法在Driver和DriverManager之间结构了一道桥梁。当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;另外一个是担任获取到数据库的连接。
文章结束给大家分享下程序员的一些笑话语录: 看新闻说中国输入法全球第一!领先了又如何?西方文字根本不需要输入法。一点可比性都没有。