JDBC的加载驱动与注册驱动有区别吗?

问题描述

Class.forName("")与DriverManager.registerDriver()有区别吗?我是菜鸟希望说详细点

解决方案

解决方案二:
Class.forName表示加载一个类。加载一个类并没有实例化这个类,在加载类的同时会初始化这个类中所有的静态成员、静态块和静态方法。根据JDBC规范,Driver的实现类必须在静态块中使用DriverManager.registerDriver()方法将自己注册到驱动管理器中去。这也就是需要执行Class.forName的原因。当然了,加载JDBC驱动还有其他的方法,Class.forName只是其中之一。其他还有:*在系统属性将jdbc.drivers属性的值设为Driver的实现类名*实现JDBC4.0规范的驱动以后不再需要Class.forName或者是jdbc.drivers了,其采用ServiceProvider方式加载驱动。因为JDBC4规定JDBC的jar包必须在META-INF/services/java.sql.Driver文件中写出Driver的实现类。需要支持JDBC4新特性的功能需要在JDK6中运行,不过所有的JDBC驱动都是向下兼容的,因此JDBC4的驱动在JDK5及以下版本无法使用JDBC4中的新特性。MySQL支持JDBC4驱动版本是Connector/J5.0.0-beta及以后版本Oracle支持JDBC4驱动版本是ojdbc6.jarMSSQLServer支持JDBC4驱动版本是MicrosoftSQLServerJDBCDriver2.0
解决方案三:
下面这段代码是MySQLJDBC的Driver实现类的源代码,可以看一下其静态块中的内容:/*Copyright2002-2004MySQLAB,2008SunMicrosystemsAllrightsreserved.Useissubjecttolicenseterms.TheMySQLConnector/JislicensedunderthetermsoftheGPL,likemostMySQLConnectors.TherearespecialexceptionstothetermsandconditionsoftheGPLasitisappliedtothissoftware,seetheFLOSSLicenseExceptionavailableonmysql.com.Thisprogramisfreesoftware;youcanredistributeitand/ormodifyitunderthetermsoftheGNUGeneralPublicLicenseaspublishedbytheFreeSoftwareFoundation;version2oftheLicense.Thisprogramisdistributedinthehopethatitwillbeuseful,butWITHOUTANYWARRANTY;withouteventheimpliedwarrantyofMERCHANTABILITYorFITNESSFORAPARTICULARPURPOSE. SeetheGNUGeneralPublicLicenseformoredetails.YoushouldhavereceivedacopyoftheGNUGeneralPublicLicensealongwiththisprogram;ifnot,writetotheFreeSoftwareFoundation,Inc.,51FranklinSt,FifthFloor,Boston,MA02110-1301USA*/packagecom.mysql.jdbc;importjava.sql.SQLException;/***TheJavaSQLframeworkallowsformultipledatabasedrivers.Eachdriver*shouldsupplyaclassthatimplementstheDriverinterface**<p>*TheDriverManagerwilltrytoloadasmanydriversasitcanfindandthen*foranygivenconnectionrequest,itwillaskeachdriverinturntotryto*connecttothetargetURL.**<p>*ItisstronglyrecommendedthateachDriverclassshouldbesmalland*standalonesothattheDriverclasscanbeloadedandqueriedwithout*bringinginvastquantitiesofsupportingcode.**<p>*WhenaDriverclassisloaded,itshouldcreateaninstanceofitselfand*registeritwiththeDriverManager.Thismeansthatausercanloadand*registeradriverbydoingClass.forName("foo.bah.Driver")**@seeorg.gjt.mm.mysql.Connection*@seejava.sql.Driver*@authorMarkMatthews*@version$Id$*/publicclassDriverextendsNonRegisteringDriverimplementsjava.sql.Driver{//~Staticfields/initializers//---------------------------------------------////RegisterourselveswiththeDriverManager//static{try{java.sql.DriverManager.registerDriver(newDriver());}catch(SQLExceptionE){thrownewRuntimeException("Can'tregisterdriver!");}}//~Constructors//-----------------------------------------------------------/***ConstructanewdriverandregisteritwithDriverManager**@throwsSQLException*ifadatabaseerroroccurs.*/publicDriver()throwsSQLException{//RequiredforClass.forName().newInstance()}}

解决方案四:
刚才看了一下Oracle的ojdbc5.jar也支持JDBC4呵呵

时间: 2024-10-20 10:26:04

JDBC的加载驱动与注册驱动有区别吗?的相关文章

sql server-关于加载SQL server数据库驱动

问题描述 关于加载SQL server数据库驱动 我下载的是SQL server2008,然后创建了一个数据库hospital,穿件了一张表,然后我在网上下载了一个jar包加到bin目录下面了,然后在eclipse里面用java程序链接数据可是加载失败,这是为什么啊 解决方案 这里的语句少些了吧! eg: Class.forName("com.mysql.jdbc.Driver"); String url1="jdbc:mysql://localhost:3306/buses

ce6的sd驱动加载失败-CE6 的驱动加载不成功?

问题描述 CE6 的驱动加载不成功? 这两天给CE6的系统加入SD卡驱动,结果发现启动后,SD卡驱动不运行.检查了编译的库文件(sdhc.dll)及目标板中的文件(sdhc.dll),都正常的,不知道是什么原因.不知有没有那位遇到过相同的情况?

Windows CE下流驱动的动态加载

    我想很多WinCE的开发人员,尤其是刚入门并且做驱动开发的工程师,都曾碰到这样一个问题,要编写一个外围设备的驱动,拿最简单的GPIO驱动来说,编写驱动本身可能只花了一会儿功夫,可要把编译生成的DLL打包到先前做好的操作系统映像当中,最简单也得MakeImg一下,还要修改BIB文件.注册表文件,以让系统启动的时候就加载该驱动,所有工作都做完了,还得花几分钟下载整个操作系统到内存去运行,这也得要个好几分钟.能力强的人一次成功,不走回头路也就算了.如果驱动编写得有问题,那又得改代码,重新编译,

WinCE流驱动加载的控制

      前段时间整理了<WinCE下调试串口的动态复用>,基本实现了调试串口与普通功能串口之间的动态切换.其中实现的方法有点欠缺,在重新烧录或者升级系统后,导致系统无法正常启动.这算是个BUG.该功能加上才几天,就陆续有好几个同事碰到.本来想着使用方便的,没想到反而增添了一些麻烦.       这个问题在实现时曾考虑到,发布版本的日志里也加了说明,如果启用了调试串口,那么在烧录或者升级系统前,须禁用调试串口.说实在的,确实有点麻烦,不小心就忘了做这个工作.而问题的根源是实现机制不太合理.调

jquery实现界面无刷新加载登陆注册_jquery

官网的登陆注册每次要跳转到另一个界面,能不能做一个简单的,在界面弹出一个框框登陆,我想了想做了这么一个案例,大家来看看成不成 贴上代码,实现了在同一个弹出窗上加载了登陆注册功能!可自由点击!当然样式丑了一些!还请见谅!demo在下面 1这里是html内容 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transi

图解WinCE6.0下的内核驱动和用户驱动

      在<WinCE驱动程序的分类>中曾提到,WinCE6.0的流驱动既可以加载到内核态也可以加载到用户态.下面通过一组图片简单说明一下这两种驱动的关系.       首先编写一个流驱动WCEDrv,代码如下. 代码 #include <windows.h> extern "C"BOOL WINAPI DllMain(HANDLE hinstDLL, DWORD dwReason, LPVOID lpvReserved){    UNREFERENCED_

DOS下加载虚拟镜像

  进入一键Ghost主菜单中,单击MS-DOS进入DOS,然后进入X盘(输入"X:"后按[Enter]),再运行"DIR/W",这里保存了超级急救盘的所有工具软件. ISO工具可以用来从一个ISO文件建立虚拟光驱,方便从中提取需要的文件.使用之前,先运行TW命令,加载汇汉字系统,使程序界面能显示汉字. 1.运行ISO批处理命令(ISO.BAT),显示程序向导界面. 2.选择ISO文件所保存的磁盘分区. 3.选择自动搜索所选盘符中的ISO文件,或者手动制定ISO文件

Office2003关闭启动文件夹加载项

当您启动 Word 时,Word 将自动加载模板和加载项位于启动文件夹中.在 Word 中的问题可能是冲突或问题造成的与外接程序.要确定问题是否由 startup 文件夹中的项目引起,请暂时关闭指向这些加载项的注册表设置. 在启动 Word 时再次以典型方式 (不使用支持模板),而无需外接程序在启动文件夹中启动 Word 操作步骤: 若要暂时关闭启动文件夹加载宏,请按照下列步骤操作: 退出所有 Office 程序. 双击桌面上的支持模板快捷方式. 在支持模板中,单击疑难解答工具. 在Micros

phalapi-进阶篇3(自动加载和拦截器)

phalapi-进阶篇3(自动加载和拦截器) 前言 先在这里感谢phalapi框架创始人@dogstar,为我们提供了这样一个优秀的开源框架. 最近工作上事情比较多所以更新比较慢希望大家见谅!这一次带来的是对于此框架自动加载机制的一个小引导,简单的聊聊是如何实现此类机制的,了解之后要如何使用,在就一同探讨一下如何使用自动加载来构建自己的公用函数以及拦截器,和如何使用拦截器,在这里在此强调一下,在进阶篇中谈论思想会比较多大家可以慢慢消化很多地方都是此框架优秀的地方,拿出来分享是为了大家更好的了解框