JDBC中注册驱动为什么使用Class.forName



首先问下:JDBC中注册驱动为什么使用Class.forName(com.mysql.jdbc.Driver)而不使用DriverManager.registerDriver(new com.mysql.jdbc.Driver())?

转载自:http://my.oschina.net/lunqi/blog/490364

首先我们来看看com.mysql.jdbc.Driver()的源代码

由源代码可以看出在mysql的Driver类中有一个静态代码块,静态代码块中已经通过DriverManager注册了这个驱动

大家都知道静态代码快是在类加载器加载这个类的字节码文件的时候就已经执行了的,也就是说,在DriverManager.registerDriver(new com.mysql.jdbc.Driver())这段代码中,一旦new了这个驱动,这个驱动就已经被加载了!

所以如果DriverManager.registerDriver(new com.mysql.jdbc.Driver()),实际上Mysql的Driver会被加载两次!!

所以只要new com.mysql.jdbc.Driver();实际上就已经注册驱动了!

但是我们能new com.mysql.jdbc.Driver()这样子来注册驱动吗?可以!但是还是不提倡,为什么呢?因为这样的话还有一个问题,这样写十分依赖Jar包,一旦jar包找不到,编译时期就会报错。所以在开发过程中通常写成:

Class.forName(“com.mysql.jdbc.Driver”);

这样的话,通过类加载的方式来加载Driver类,照样能够执行static代码块中的注册驱动的方法。而且由于将Driver的位置写成了字符串的形式,对jar包的依赖就降低了,也易于使用配置文件加载这个类,所以下次如果换成连接Oracle或者其他数据库,改一下配置文件再填一个jar包就可以了。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值