jdbc中连接驱动的方式的区别
来源:互联网 发布:淘宝店铺名字化妆品 编辑:程序博客网 时间:2024/05/29 11:24
在学习JDBC的时候,通常有两种方式去注册数据库驱动程序(这里采用MySQL数据库),分别为:
- DriverManager.registerDriver(new Driver());
- Class.forName("com.mysql.jdbc.Driver");
那么这两种方式有什么异同呢?首先我们到DriverManager中去看一下,
- public static synchronized void registerDriver(java.sql.Driver driver)
- throws SQLException {
- if (!initialized) {
- initialize();
- }
- DriverInfo di = new DriverInfo();
- di.driver = driver;
- di.driverClass = driver.getClass();
- di.driverClassName = di.driverClass.getName();
- // Not Required -- drivers.addElement(di);
- writeDrivers.addElement(di);
- println("registerDriver: " + di);
- /* update the read copy of drivers vector */
- readDrivers = (java.util.Vector) writeDrivers.clone();
- }
很明显,DriverManager将我们需要注册的驱动程序信息封装成DriverInfo放进了一个writeDrivers中,这个writeDrivers是DriverManager中声明的一个static类型Vector变量。在getConnection的时候会再用到。
那么Class.forName("com.mysql.jdbc.Driver")是如何注册驱动程序的呢,我们知道Class.forName("类名")的主要作用是向虚拟机实例化一个Class实例,我们看一下com.mysql.jdbc.Driver的源代码。
- public class Driver extends NonRegisteringDriver implements java.sql.Driver {
- // ~ Static fields/initializers
- // ---------------------------------------------
- //
- // Register ourselves with the DriverManager
- //
- static {
- try {
- java.sql.DriverManager.registerDriver(new Driver());
- } catch (SQLException E) {
- throw new RuntimeException("Can't register driver!");
- }
- }
在 com.mysql.jdbc.Driver中有一段静态代码块,是向 DriverManager注册一个Driver实例。这样在Class.forName("com.mysql.jdbc.Driver")的时候,就会首先去执行这个静态代码块,于是和DriverManager.registerDriver(new Driver())有了相同的效果。
那么对于这两种方法,在这里,我推荐使用第二种,即Class.forName("类名")的方式。原因有两点
1、在我们执行DriverManager.registerDriver(new Driver())的时候,静态代码块也已经执行了,相当于是实例化了两个Driver对象。
2、 DriverManager.registerDriver(new Driver())产生了一种对MySQL的一种依赖。而Class.forName的方式我们完全可以在运行的时候再动态改变。
- jdbc中连接驱动的方式的区别
- JDBC连接DB2的四种类型的驱动方式
- JDBC连接的方式
- 各种数据库的jdbc驱动下载及连接方式
- 各种数据库的jdbc驱动及连接方式
- 各种数据库的jdbc驱动下载及连接方式
- 各种数据库的jdbc驱动下载及连接方式
- 各种数据库的jdbc驱动下载及连接方式
- 各种数据库的jdbc驱动下载及连接方式
- 各种数据库的jdbc驱动下载及连接方式
- 各种数据库的jdbc驱动下载及连接方式
- 各种数据库的jdbc驱动下载及连接方式
- 各种数据库的jdbc驱动下载及连接方式
- jdbc连接的连接方式
- JDBC与JNDI这两种连接方式的区别
- JDBC中MySQL注册驱动的三种方式
- JDBC中注册驱动的几种方式
- day21 jdbc中涉及到知识点 jdbc编程步骤 jdbc注册驱动的三种方式
- Git提交项目到GitHub配置
- 查看uboot源代码的预备知识
- JavaScript—易犯错的题目
- 关于WINDOWS去ping linux为什么ping不通
- Spark Core 调优指南
- jdbc中连接驱动的方式的区别
- Linux文件类型与扩展名
- Python 边做边学 9.2 数据库操作--定义数据字段(DbColumn)
- OpenJ_POJ
- 炮兵阵地(状态压缩dp)解题报告
- 欢迎使用CSDN-markdown编辑器
- Python——编码风格建议
- hasOwnproperty的使用,看是不是对象自身下面的属性
- 每日积累(20170819-day-25)(Nvidia CUDA_ARCH_BIN & CUDA_ARCH_PTX setting)