前言
近期在研究Mybatis框架,因为该框架基于JDBC。想要非常好地理解和学习Mybatis,必需要对JDBC有较深入的了解。所以便把JDBC 这个东东翻出来。好好总结一番,作为自己的笔记,也是给读者一个參考~~~下面是本文的组织结构。读者能够点击上面的文件夹查看:
概述
普通情况下。在应用程序中进行数据库连接,调用JDBC接口,首先要将特定厂商的JDBC驱动实现载入到系统内存中。然后供系统使用。
基本结构图例如以下:
驱动载入入内存的过程
这里所谓的驱动,事实上就是实现了java.sql.Driver接口的类。如oracle的驱动类是 oracle.jdbc.driver.OracleDriver.class(此类能够在oracle提供的JDBC jar包中找到),此类实现了java.sql.Driver接口。
因为驱动本质上还是一个class,将驱动载入到内存和载入普通的class原理是一样的:使用Class.forName("driverName")。下面是将经常使用的数据库驱动载入到内存中的代码:
//载入Oracle数据库驱动
Class.forName("oracle.jdbc.driver.OracleDriver");
//载入SQL Server数据库驱动
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
//载入MySQL 数据库驱动
Class.forName("com.mysql.jdbc.Driver");
注意:Class.forName()将相应的驱动类载入到内存中,然后运行内存中的static静态代码段,代码段中。会创建一个驱动Driver的实例,放入DriverManager中,供DriverManager使用。
比如,在使用Class.forName() 载入oracle的驱动oracle.jdbc.driver.OracleDriver时。会运行OracleDriver中的静态代码段,创建一个OracleDriver实例。然后调用DriverManager.registerDriver()注冊:
static {
Timestamp localTimestamp = Timestamp.valueOf("2000-01-01 00:00:00.0");
try {
if (defaultDriver == null) {
//创建一个OracleDriver实例,然后注冊到DriverManager中
defaultDriver = new OracleDriver();
DriverManager.registerDriver(defaultDriver);
}
} catch (RuntimeException localRuntimeException) {
} catch (SQLException localSQLException) {
}
Driver的功能
java.sql.Driver接口规定了Driver应该具有下面功能:
当中:
acceptsURL(String url)方法用来測试对指定的url,该驱动是否能打开这个url连接。driver对自己可以连接的url会制定自己的协议。仅仅有符合自己的协议形式的url才觉得自己可以打开这个url,假设可以打开。返回true,反之,返回false;
比如:oracle定义的自己的url协议例如以下:
jdbc:oracle:thin:@//:/ServiceName
jdbc:oracle:thin:@::
oracle自己的acceptsURL(String url)方法例如以下:
public boolean acceptsURL(String paramString) {
if (paramString.startsWith("jdbc:oracle:")) {<