zoukankan      html  css  js  c++  java
  • JDBC4.0自动加载驱动器类

     1 JDBC4.0自动加载驱动器类
     2     从JDK1.6开始,Oracle就将修改了添加了新的加载JDBC驱动的方式。即JDBC4.0。在启动项目或是服务时,会判断当前classspath中的所的jar包,并检查META-INF目录下,是否包含services文件夹,如果包含,就会将里面的配置加载成相应的服务。
     3 如Oracle11g的ojdbc6.jar包:
     4 
     5 META-INF/services/jdbc.sql.Driver文件内容只有一行,即实现java.sql.Driver的类:
     6 oracle.jdbc.OracleDriver
     7 
     8 Oracle在随即发布的mysql-connector-java-5.1.8.jar中,也同样添加了上述的特性:
     9 
    10 里面的内容,也是一句,即:
    11 com.mysql.jdbc.Driver
    12 
    13 为了验证是否会自动加载数据库驱动类,我们书写一段Java代码:
    14 public static void main(String[] args) throws Exception {
    15         //从DriverManager中获取所有驱动类,遍历并输出
    16         Enumeration<java.sql.Driver> en = DriverManager.getDrivers();
    17         while(en.hasMoreElements()){
    18             java.sql.Driver d = en.nextElement();
    19             System.err.println(d.toString());
    20         }
    21 }
    22 在MyEclipse或是Eclipse环境下,添加两个Jar包,分别为ojdbc6.jar的mysql-connector-5.1.8.jar:运行结果如下:
    23 sun.jdbc.odbc.JdbcOdbcDriver@173a10f
    24 oracle.jdbc.OracleDriver@e09713
    25 com.mysql.jdbc.Driver@1f1fba0
    26 可见,jdk1.6加载了三个驱动类。
    27 
    28 为了更好的验证此问题,我们再从命令行依次加载不同的jar包进行测试:
    29 第一次执行,没有指定任何的外部jar文件,可见只加载了系统的JdbcOdbcDriver:
    30 
    31 第二次执行:先设置ojdbc6.jar,即oracle的驱动包,可见已经自动加载了两个驱动类:
    32 
    33 第三次运行:再加载mysql-connector-java-5.1.18.jar(如果你用的是5.1.5你可以自己手工在jar包中的META-INF下建立一个services文件夹,然后建立一个java.sql.Driver文件,里面输入com.mysql.jdbc.Driver即可):注意以下代码中,使用%classpath%串联已经设置的classpath:
    34 
    35 
    36 需要说明的是,JDK6是一个聪明的设计。如果发现你已经注册过某个驱动,将不会再次为你注册这个驱动。除非你显式的调用了DriverManager.registerDriver(new SomeDriver())方法:
    37 以下是若干个测试:
    38     public static void main(String[] args) throws Exception {
    39         DriverManager.registerDriver(new Driver());//自己通过严重依赖的方式注册一个,不建议这样做
    40         Enumeration<java.sql.Driver> en = DriverManager.getDrivers();
    41         while(en.hasMoreElements()){
    42             java.sql.Driver d = en.nextElement();
    43             System.err.println(d.toString());
    44         }
    45     }
    46 输出结果:
    47 sun.jdbc.odbc.JdbcOdbcDriver@66848c
    48 oracle.jdbc.OracleDriver@47b480
    49 com.mysql.jdbc.Driver@9931f5
    50 com.mysql.jdbc.Driver@19ee1ac
    51 
    52 测试代码2:
    53     public static void main(String[] args) throws Exception {
    54         Class.forName("com.mysql.jdbc.Driver");//即便是删除也会只注册一个
    55         Enumeration<java.sql.Driver> en = DriverManager.getDrivers();
    56         while(en.hasMoreElements()){
    57             java.sql.Driver d = en.nextElement();
    58             System.err.println(d.toString());
    59         }
    60     }
    61 结果:
    62 sun.jdbc.odbc.JdbcOdbcDriver@66848c
    63 oracle.jdbc.OracleDriver@47b480
    64 com.mysql.jdbc.Driver@19ee1ac
  • 相关阅读:
    @Repository、@Service、@Controller 和 @Component
    SSH简单搭建
    超详细的Maven使用教程
    Maven入门指南① :Maven 快速入门及简单使用
    MySQL建立一个连接工具类
    js分页demo
    Java通过JDBC 进行Dao层的封装
    Linux 上svn使用http访问设置
    Linux (Ubuntu)安装svn
    阿里云域名文档
  • 原文地址:https://www.cnblogs.com/litaiqing/p/4315664.html
Copyright © 2011-2022 走看看