注册mySQL到JDBC驱动程序方法浅谈

上传人:m**** 文档编号:65293979 上传时间:2018-12-31 格式:DOCX 页数:10 大小:18.62KB
返回 下载 相关 举报
注册mySQL到JDBC驱动程序方法浅谈_第1页
第1页 / 共10页
注册mySQL到JDBC驱动程序方法浅谈_第2页
第2页 / 共10页
注册mySQL到JDBC驱动程序方法浅谈_第3页
第3页 / 共10页
注册mySQL到JDBC驱动程序方法浅谈_第4页
第4页 / 共10页
注册mySQL到JDBC驱动程序方法浅谈_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《注册mySQL到JDBC驱动程序方法浅谈》由会员分享,可在线阅读,更多相关《注册mySQL到JDBC驱动程序方法浅谈(10页珍藏版)》请在金锄头文库上搜索。

1、注册mySQL到JDBC驱动程序方法浅谈一、注册方法(4种)1)服务提供者框架:符合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.jdb

2、c.Driver)仍然可以存在,但是不会起作用。2)Class.forName(com.mysql.jdbc.Driver);通过对类com.mysql.jdbc.Driver初始化,执行静态初始化代码,调用DriverManager注册JDBC驱动。注:通过setProperty的测试,确认类com.mysql.jdbc.Driver也没有加载,那么静态初始化代码肯定被执行了,但是如果服务提供者框架已经注册的服务,这里注册会失败,编程的预期是这样的,可是理论上DriverManager.registerDriver可以重复注册的,为什么这里不能重复注册呢?3)System.setProper

3、ty(jdbc.drivers, com.mysql.jdbc.Driver;);设置JVM的系统属性,当JVM第一次加载DriverManager类时,会执行类的静态初始化代码,代码中调用loadInitialDrivers()方法,就会加载设置的属性对应的类,执行类的静态初始化代码完成注册。注:因为注册的机制无法深入理解,只知道没有加载过的类可以注册成功,加载过的就不能重复注册了。注:setProperty必须在DriverManager第一次运行前才有效,说明”服务提供者”框架注册服务时并没有加载类,因为一旦加载类就会执行类的静态初始化代码,那么注册JDBC驱动就一定会调用DriverM

4、anager类的静态初始化代码,那么setProperty就会失效,所以说明注册服务是不加载类的。4)DriverManager.registerDriver(new com.mysql.jdbc.Driver();其实前面的2)和3)最终都是通过这个方法注册的,但是这个方法就可以重复注册。注:对于重复注册后,建立链接时使用哪个驱动我就不明白了,可以取消注册,取消的关键字是基于创建的对象的,所以就算重名也不会出错。注:这种注册方式没有前面几种好,因为这种注册方式会在代码中与需要注册的驱动程序的类绑定,前面都可以通过配置参数实现注册。二、各自特点:1)全自动。只要提供符合规范的JAR文件就可以了

5、。2)利用反射机制,将驱动类注入到代码中,不需要与代码绑定。3)基于系统的属性设置方法,将驱动类注入到代码中,但是好像只能绑定一个JDBC驱动。4)最终的注册机制。会出现重复注册,但是好像对程序没影响,还需要与代码绑定,驱动变了,必须修改代码,维护成本过高,当然也是灵活性最好,管理最方便的。以下是测试代码:import java.sql.Connection;import java.sql.Driver;import java.sql.DriverManager;import java.sql.SQLException;import java.util.Enumeration;/* * aut

6、hor 朱远翔.Tom 测试JDBC驱动注册 */public class JDBCDriverTest public static void main(String args) Driver aDriver; Connection connection; Enumeration em; / “org.gjt.mm.mysql.Driver”是“com.mysql.jdbc.Driver”的子类,其构造函数就是调用父类的构造函数。 String driverString = com.mysql.jdbc.Driver; / String driverString = org.gjt.mm.my

7、sql.Driver; String url = jdbc:mysql:/localhost/ElectricalStore?useSSL=false; String username = admin; String password = 123456; try / 将DriverManager的日志流输出到Console窗口中,方便监控 / DriverManager.setLogStream(System.out); / DriverManager.println(-DriverManager logs start!-); / 只是设置了一个JVM的系统属性,并不建立JDBC驱动程序。 /

8、 建立JDBC驱动是依赖系统第一次调用DriverManager类时,执行了这个类的静态初始化代码中的loadInitialDrivers(), / 加载驱动的方法会把设置的jdbc.drivers属性对应的驱动类通过DriverManager.registerDriver注册到JDBC中。 / 因此,必须放在DriverManager被第一次调用之间,也就是需要将前面那两行代码注释掉 System.out.println(1.1 Tried to use setProperty.); System.setProperty(jdbc.drivers, driverString); System

9、.out.println(-List of all jdbc drivers-); em = DriverManager.getDrivers(); / 获取已加载JDBC驱动程序的Enumeration if (!em.hasMoreElements() System.out.println(There is no JDBC drivers); else while (em.hasMoreElements() aDriver = (Driver) em.nextElement(); System.out.println(aDriver); System.out.println(1.2 we

10、tried to use Class.forName); / Class.forName(driverString)在JavaSE 6.0后符合JDBC 4.0规范的驱动可以不用 / 基于服务提供机制( Service Provider mechanism), / 系统会自动搜索mysql-connector-java-?-bin.jar中的META-INF/services/java.sql.Driver / 这个文件会包含mysql jdbc驱动程序的入口:com.mysql.jdbc.Driver / 应用程序调用Class.forName()也不会出错,只是什么都不会执行。 / 因为C

11、lass.forName()就是执行静态初始化代码,已经初始化过的类就无法激活这段代码了 / System.setProperty(jdbc.drivers,driverString);与Class.forName()一样。 try Class.forName(com.mysql.fabric.jdbc.FabricMySQLDriver); catch (ClassNotFoundException e) System.out.println(Driver not found); System.out.println(-List of all jdbc drivers-); em = Dri

12、verManager.getDrivers(); / 获取已加载JDBC驱动程序的Enumeration if (!em.hasMoreElements() System.out.println(There is no JDBC drivers); else while (em.hasMoreElements() aDriver = (Driver) em.nextElement(); System.out.println(aDriver); System.out.println(1.3 we tried to use DriverManager.registerDriver); / 手工注册

13、mySQL的JDBC驱动程序,也就出现了与mySQL绑定过紧的问题,如果以后需要更换驱动,就需要修改代码。 / 系统容许出现重复注册同样的jdbc驱动类 DriverManager.registerDriver(new com.mysql.jdbc.Driver(); DriverManager.registerDriver(new com.mysql.fabric.jdbc.FabricMySQLDriver(); DriverManager.registerDriver(new com.mysql.jdbc.Driver(); System.out.println(-List of all jdbc drivers-); em = DriverManager.getDrivers(); / 获取已加载JDBC驱动程

展开阅读全文
相关资源
相关搜索

当前位置:首页 > IT计算机/网络 > 数据库

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号