JDBC

117 篇文章 0 订阅
116 篇文章 0 订阅

2、加载并注册驱动

加载并注册驱动:

加载驱动,把驱动类加载到内存

注册驱动,把驱动类的对象交给DriverManager管理,用于后面创建连接等使用。

2.1 Driver接口

Java.sql.Driver 接口是所有 JDBC 驱动程序需要实现的接口。这个接口是提供给数据库厂商使用的,不同数据库厂商提供不同的实现。

  1. MySQL:com.mysql.jdbc.Driver
  2. SQLServer:com.microsoft.sqlserver.jdbc.SQLServerDriver
  3. Oracle:oracle.jdbc.driver.OracleDriver

2.2编写加载与注册驱动的代码

1)直接创建Driver接口的实现类对象

例如:

Driver driver = new com.mysql.jdbc.Driver();

//因为与mysql驱动包中的类发生直接依赖,所以这样可移植性不够好

2)DriverManager 类的 registerDriver()

在实际开发中,程序中不直接去访问实现了 Driver 接口的类,而是由驱动程序管理器类(java.sql.DriverManager)去调用这些Driver实现。

DriverManager 类是驱动程序管理器类,负责管理驱动程序。

通常不用显式调用 DriverManager 类的 registerDriver() 方法来注册驱动程序类的实例。

        //DriverManager.registerDriver()方式注册驱动,还是依赖

        DriverManager.registerDriver(new com.mysql.jdbc.Driver());

3)Class.forName()或ClassLoader对象.loadClass()

因为 Driver 接口的驱动程序类都包含了静态代码块,在这个静态代码块中,会调用 DriverManager.registerDriver() 方法来注册自身的一个实例,所以可以换一种方式来加载驱动。(即只要想办法让驱动类的这段静态代码块执行即可注册驱动类,而要让这段静态代码块执行,只要让该类被类加载器加载即可)

调用 Class 类的静态方法 forName(),向其传递要加载的 JDBC 驱动的类名

//1、通过反射,加载与注册驱动类,解耦合(不直接依赖)

Class.forName("com.mysql.jdbc.Driver");

//2、通过类加载器加载驱动类,解耦合(不直接依赖)

ClassLoader.getSystemClassLoader().loadClass("com.mysql.jdbc.Driver");

 

 

 

 

4)服务提供者框架(例如:JDBC的驱动程序)自动注册(有版本要求)

符合JDBC 4.0规范的驱动程序包含了一个文件META-INF/services/java.sql.Driver,在这个文件中提供了JDBC驱动实现的类名。例如:mysql-connector-java-5.1.40-bin.jar文件中就可以找到java.sql.Driver文件,用文本编辑器打开文件就可以看到:com.mysql.jdbc.Driver类。

JVM的服务提供者框架在启动应用时就会注册服务,例如:MySQL的JDBC驱动就会被注册,而原代码中的Class.forName("com.mysql.jdbc.Driver")仍然可以存在,但是不会起作用。

但是注意mysql-connector-java-5.0.8-bin.jar版本的jar中没有,如下

 

 


本教程由尚硅谷教育大数据研究院出品,如需转载请注明来源。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值