JDBC学习--JDBC驱动程序

JDBC驱动程序

JDBC通过一系列接口来访问数据库,而这些接口的实现则是由不同的数据库厂商或组织实现的。要实现对某一特定类型数据库的访问就要通过注册JDBC驱动程序来让程序知道去哪里调用JDBC API 接口的实现。

先看下面的一段程序:

Class.froName( " com.mysql.jdbc.Driver " ).newInstance(); // 加载类并初始化这个类的静态初始化部分
String url  =   " jdbc:mysql://localhost:3306/math " ;                // 数据库URL
String userName  =   " root " ;                                                      // 连接数据库的用户名
String password  =   " password " ;                                             // 密码
Connection oConn  =  DriverManager.getConnection(url,userName,password); // 建立数据库连接

java.sql.DriverManager:从名字就可以看出是用于驱动程序管理的,它的主要责任是保留一个驱动程序的列表,并通过getConnection方法来给应用程序提供与所请求的URL相匹配的Driver(可能是由于同一个数据库的驱动程序可能是有几种不同的实现方式,但如果DriverManager中对一个URL有多个匹配的Driver,它是不是只选择第一个找到的呢?),并返回Connection对象,如果找不到就会抛出一个异常,也就是这一句 Connection oConn = DriverManager.getConnection(url,userName,password)。同时还提供了registerDriver()和deregisterDriver(),这两个方法允许驱动程序的工具用DriverManager注册驱动程序或从列表中删除。可以感觉出是在用Class.froName("com.mysql.jdbc.Driver").newInstance();加载类并初始化这个类的静态初始化部分时调用registerDriver()的方法注册的,我在mysql驱动程序的源码的Driver类中找到对这个方法的调用。

package com.mysql.jdbc;
public   class  Driver extends NonRegisteringDriver  {
  

    
//
    
// Register ourselves with the DriverManager
    
//
    static {
        
try {
            java.sql.DriverManager.registerDriver(
new Driver());
        }
 catch (java.sql.SQLException E) {
            
throw new RuntimeException("Can't register driver!");
        }


        
if (DEBUG) {
            Debug.trace(
"ALL");
        }

    }


    
/**//**
     * Construct a new driver and register it with DriverManager
     *
     * @throws java.sql.SQLException if a database error occurs.
     
*/

    
public Driver() throws java.sql.SQLException {
        
// Required for Class.forName().newInstance()
    }

}

你可能感兴趣的:(JDBC学习--JDBC驱动程序)