JDBC之Class.forName()

来源:互联网 发布:ubuntu wily 编辑:程序博客网 时间:2024/05/17 23:12

    我们在使用JDBC连接数据库时,最常用到的就是Class.forName(xxx.xxx……)这句代码来加载数据库驱动类,其加载的原理是java的反射机制。小括号中的xxx.xxx.xxx表示数据库驱动类的全名,全名即包括类名和类名前面所有包名。执行这句代码只是加载一个数据库驱动类。但是,在数据库驱动类被加载完后,它会做两件事。

根据JDBC规范,数据库驱动类必须自己向DriverManager类注册自己,所有遵守这个规范的数据库驱动类都必须有下面类似的代码:

public class myjdbcdriver implements driver {
      static {
            drivermanager.registerdriver(new myjdbcdriver());
       }
}

这是一个静态初始化块,静态初始化块内的代码是在类代码被加载到内存后立即执行的,在这里它做的两件事是:

1、创建自己的一个实例。

2、把这个实例注册到数据库驱动程序管理类 drivermanager中备用。

     也就是说,数据库驱动类,只有一被加载,就会自动把自己的一个实例注册到数据库驱动程序管理类中等待被调用。

     我们创建数据库连接一般是用DriverManager类的getConnection(url)方法,这个url参数中包括了请求连接的数据库的类型,DriverManager类从url中获取到的数据库类型,然后在已经向它注册了的那些驱动程序中查找,如果找到对应的驱动程序,就创建数据库连接,如果找不到,就报错。所以,DriverManager类要想建立到某类型数据库的连接,必须里面有注册这种类型的数据库驱动程序,而我们只需执行这句Class.forName(xxx.xxx……)就可以把我们需要的驱动注册到里面去。

原创粉丝点击