注册jdbc驱动的三种方式

news/2024/5/19 2:10:10 标签: jdbc, 数据库, java, vector, url


---------------------------------------------------------------------------

原文地址:http://www.yanwushu.com/post/74.html

---------------------------------------------------------------------------



java.sql.DriverManger类简介


Java的驱动管理类。管理一组 JDBC 驱动程序。

javax.sql.DataSource 接口是 JDBC 2.0 API 中的新增内容,它提供了连接到数据源的另一种方法。使用 DataSource 对象是连接到数据源的首选方法。更深的理解请参见java 文档。

DiverManager类有个vector(向量)类型的属性drivers。可在向量中加入很多驱动,当DriverManager去取连接的时候,若果drivers里有很多驱动,它会把drivers里面的各个驱动的url和创建连接时传进来的url逐一比较,遇到对应的url,则建立连接。 


方法一


System.setProperty("jdbc.drivers","com.mysql.jdbc.Driver");

通过系统的属性设置注册驱动,如果要注册多个驱动,则System.setProperty("jdbc.drivers","com.mysql.jdbc.Driver:com.oracle.jdbc.Driver");

这种驱动注册方式很少使用。


方法二


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

这种方式不会对具体的驱动类产生依赖(即不用import驱动类)。

Class类的forName方法中对参数指定的类进行了装载操作。在这里将com.mysql.jdbc.Driver类装载到jvm。众所周知,类装载时,将执行被装载类的静态代码块,而Driver类有一个静态代码块如下:

static{

   try{

       java.sql.DriverManager.registerDriver(newDriver());

    }catch(SQLExceptione){

        thrownew RuntimeException("can't register driver!");

    }

}

所以在装载过程中即完成了driver的注册。这也是使用最多的一种注册驱动方式。


方法三


DriverManager.registerDriver(newcom.mysql.jdbc.Driver());

会造成DriverManager中产生两个一样的驱动,并会对具体的驱动类产生依赖。

具体来说就是:

1,装载Driver类时注册一次驱动(有关类装载,请参考http://www.yanwushu.com/post/54.html),执行此代码时,又注册一次。

2,由于实例化了com.mysql.jdbc.Driver.class,导致必须import该类,从而具体驱动产生了依赖。不方便扩展代码。





http://www.niftyadmin.cn/n/736685.html

相关文章

理解Class.forName()

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 原文地址:http://www.yanwushu.com/post/55.html -----------…

Hibernate实体映射配置1(java@注解方式)

实体和数据库之间存在某种映射关系,hibernate根据这种映射关系完成数据的存取。在程序中这种映射关系由映射文件(*.hbm.xml)或者java注解()定义。 本文以java注解的形式总结映射关系配置。 实体类组件以及注解标签映射关系 实体类----------…

理解ThreadLocal(线程局部变量)

ThreadLocal(线程局部变量)概述 ThreadLocal是什么呢?其实ThreadLocal并非是一个线程的本地实现版本,它并不是一个Thread,而是threadlocalvariable(线程局部变量)。也许把它命名为ThreadLocalVar更加合适。线程局部变量…

log4j使用快速入门

1.引言 在应用程序中添加日志记录总的来说基于三个目的: .监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工作 .跟踪代码运行时轨迹,作为日后审计的依据 .担当集成开发环境中的调试器的作用,向文件或控制…

java资源国际化之常用类

本文转自http://xa-zbl.iteye.com/blog/249386 国际化(Internationalization,又称il8n),是越来越多的应用软件必须面临的问题,Java语言采用Unicode编码,并且提供了强大的类库支持国际化编程。采用Java语言编程,可以方…

Jstl国际化标签库的介绍

本文转自http://xa-zbl.iteye.com/blog/249386 I18N formatting 标签库用于在 JSP 页面中做国际化的动作。在该标签库中的标签一共有 12 个&#xff0c;被分为了两类&#xff0c;分别是&#xff1a; 国际化核心标签&#xff1a; <fmt:setLocale>、<fmt:bundle>、…

在Spring中进行国资源际化配置

本文转自http://xa-zbl.iteye.com/blog/249386 1、首先我们要准备资源文件 messages.properties 作为默认的资源文件&#xff0c;另外准备了3个版本的资源文件&#xff1a;messages_en_US.properties messages_zh_CN.properties messages_zh_TW.properties。放在class-path也…

Struts2自定义拦截器

Struts2提供面向切面编程&#xff08;AOP Aspect-Oriented Programing&#xff09;。在Struts2中拦截器是一种成熟的AOP的实现。 拦截器(Intercaptor)在Action前后执行。 类似于Filter Chain(过滤器链)&#xff0c;多个拦截器组成拦截器栈(Inteceptor stack)。 拦截器和Filte…