Jdbc程序中的DriverManager用于加载驱动,并创建与数据库的链接,这个API的常用方法:
DriverManager.registerDriver(new Driver())
DriverManager.getConnection(url, user, password),
注意:在实际开发中并不推荐采用registerDriver方法注册驱动。
原因一、查看Driver的源代码可以看到,如果采用此种方式,会导致驱动程序注册两次,也就是在内存中会有两个Driver对象。
原因二、程序依赖mysql的api,脱离mysql的jar包,程序将无法编译,将来程序切换底层数据库将会非常麻烦。
推荐方式:Class.forName(“com.mysql.jdbc.Driver”);
采用此种方式不会导致驱动对象在内存中重复出现,并且采用此种方式,程序仅仅只需要一个字符串,不需要依赖具体的驱动,使程序的灵活性更高。
同样,在开发中也不建议采用具体的驱动类型指向getConnection方法返回的connection对象。
实例代码:
/**
*
*/
package com.zhiyou.U;
/**
* @author Administrator
*
*/
public class Phone {
static {
System.out.println("静态代码块,只执行一次");
}
public Phone() {
super();
// TODO Auto-generated constructor stub
System.out.println("object 无参构造");
}
}
/**
*
*/
package com.zhiyou.U;
/**
* @author Administrator
*
*/
public class Test {
/**
* @param args
* @throws ClassNotFoundException
*/
public static void main(String[] args) throws ClassNotFoundException {
// TODO Auto-generated method stub
// 针对registerDriver进行实例剖析
// 为什么用registerDriver驱动会注册两次。
// 当对Phone进行初始化对象时候,
// 静态代码块就会执行一次
// 此外object的无参构造也会执行一次
Phone phone = new Phone();
// 当再次初始化对象时候
// 静态代码块是不会执行的
// 但是object的无参构造还是会执行。
Phone phone2 = new Phone();
// 利用Class.forname属于纯净化的注册驱动,
// 从运行结果可以看出来,只是静态代码运行了,
// 从registerDriver源代码中可以看出来
// 第一次驱动注册是在static静态代码中,
// registerDriver注册一次
// new Driver又注册一次
// 查看源代码注册两次
Class.forName("com.zhiyou.U.Phone");
}
}