一种同一数据库多个版本JDBC驱动共存方法和系统技术方案

技术编号:19822451 阅读:26 留言:0更新日期:2018-12-19 14:56
本发明专利技术涉及数据访问技术领域,具体涉及一种同一数据库多个版本JDBC驱动共存方法和系统,其中方法包括:通过URLClassLoader动态加载驱动类;通过动态加载的驱动类,动态创建驱动类实例;使用DriverAdpter类封装原始的驱动类实例,并将得到的DriverAdpter类实例注册到驱动管理器;通过驱动管理器中注册的DriverAdpter类实例创建数据库的连接对象;从所述驱动管理器中注销当前的DriverAdpter类实例,以便进行下个版本驱动的动态加载。本发明专利技术对于多个不同版本驱动,分别通过不同的URLClassLoader动态加载驱动类,并进行动态注册和注销,实现了同时加载多个版本的驱动;同时使用DriverAdpter类封装驱动类实例,绕过了驱动管理器对于类加载器的限制,使不同版本之间的数据交换和集成得以方便的实现。

【技术实现步骤摘要】
一种同一数据库多个版本JDBC驱动共存方法和系统
本专利技术涉及数据访问
,具体涉及一种同一数据库多个版本JDBC驱动共存方法和系统。
技术介绍
java数据库连接(JavaDataBaseConnectivity,简写为JDBC)是Java编程语言访问数据库的规范,它提供了一套完整的、独立于任何特定数据库的编程接口,使得java程序能够编写通用的数据库操作程序,而无需绑定到每种数据库不同的编程接口。不同的数据库厂商发布数据库时会同时发布实现了JDBC接口的驱动程序,一般都是以jar包的形式提供。JDBC的工作原理可参考图1:java应用程序访问数据库时,一般需要将jar包放到java虚拟机(JavaVirtualMachine,简写为jvm)的classpath路径上,这样java应用程序启动后,java虚拟机可以自动通过classpath加载jar包中的驱动类,并将驱动类实例注册到JDBC驱动管理器(JDBCDriverManager)中。java应用程序再通过驱动管理器获取到某个特定数据库的连接对象,并通过该连接对象调用JDBC接口(JDBCDriverInterface),进而执行对相应的数据库的各种操作。其中,连接对象和JDBC接口与数据库的实际交互则由数据库驱动实现。在使用JDBC访问数据库时,主要包括以下步骤:加载驱动类、创建驱动类实例并向驱动管理器注册、通过驱动管理器创建连接对象、通过连接对象操作数据库以及关闭并释放连接对象。上述使用JDBC的方法对于一般的应用系统来说是没有问题的,因为对于一般的业务系统来说通常只需要访问一个数据库,但是在建设数据中心或者数据共享类应用时,很可能要访问企业不同时期建设的各种业务数据库来进行数据交换或者数据集成,此时上述方法和步骤无法支持在同一应用中同时访问同一种数据库的不同版本驱动,这是由于:在传统方法中对于驱动类的加载为静态加载,静态加载JDBC驱动的方式无法加载多个类名相同的不同版本驱动,驱动管理器中也不支持同时注册多个类名相同但是实际实现不同的驱动,因此也就无法将同一种数据库中不同版本的JDBC驱动注册到DirverManager中;如果直接这样做可能导致混乱,使得DirverManager无法找到正确的驱动对象来创建连接。鉴于此,克服上述现有技术所存在的缺陷是本
亟待解决的问题。
技术实现思路
本专利技术需要解决的技术问题是:在使用JDBC访问数据库时,传统的静态加载方法无法同时加载一种数据库多个版本的JDBC驱动,驱动管理器中也不支持同时注册多个类名相同但是实际实现不同的驱动,使得java应用无法同时访问同一数据库的不同版本,进而影响不同版本间的数据交换和集成。本专利技术通过如下技术方案达到上述目的:第一方面,本专利技术提供了一种同一数据库多个版本JDBC驱动共存方法,包括:通过URLClassLoader动态加载驱动类;通过动态加载的驱动类,动态创建驱动类实例;使用DriverAdpter类封装原始的所述驱动类实例以得到DriverAdpter类实例,并将所述DriverAdpter类实例注册到驱动管理器;通过所述驱动管理器中注册的DriverAdpter类实例创建数据库的连接对象;从所述驱动管理器中注销当前的DriverAdpter类实例,以便进行下个版本驱动的动态加载;其中,对于多个不同版本的JDBC驱动,分别使用不同的URLClassLoader进行驱动类的加载,以便创建不同版本的驱动类实例。优选的,在所述从所述驱动管理器中注销当前的DriverAdpter类实例之后,所述方法还包括:通过各连接对象操作对应版本驱动下的数据库;对于完成数据库操作的对应版本,关闭并释放对应的连接对象。优选的,所述通过所述驱动管理器中注册的DriverAdpter类实例创建数据库的连接对象,具体为:所述驱动管理器调用已经注册的DriverAdpter类实例的acceptsURL(Stringurl)方法;如果acceptsURL(Stringurl)方法返回true且通过类加载器的检查,则利用对应的DriverAdpter类实例创建数据库的连接对象。优选的,所述类加载器的检查具体为:所述驱动管理器检查AppClassLoader是否能够加载到由URLClassLoader动态加载的驱动类,如果不能加载则报错;如果能加载则通过对类加载器的检查。优选的,所述DriverAdpter类由AppClassLoader加载,使得所述DriverAdpter类位于java虚拟机的classpath路径上,进而通过类加载器的检查。优选的,在执行所述通过所述驱动管理器中注册的DriverAdpter类实例创建数据库的连接对象时,所述DriverAdapter类实例将创建连接的操作委托给被封装的所述驱动类实例,由所述驱动类实例创建连接。优选的,在执行所述通过所述驱动管理器中注册的DriverAdpter类实例创建数据库的连接对象时,用户通过调用驱动管理器getConnection方法来创建数据库的连接对象,且创建连接时传入jdbcurl参数给驱动管理器getConnection方法。第二方面,本专利技术还提供了一种同一数据库多个版本JDBC驱动共存系统,用于实现第一方面所述的同一数据库多个版本JDBC驱动共存方法,所述系统包括:动态加载单元,用于通过URLClassLoader动态加载驱动类;动态创建单元,用于通过动态加载的驱动类,动态创建驱动类实例;封装注册单元,用于使用DriverAdpter类封装原始的所述驱动类实例以得到DriverAdpter类实例,并将所述DriverAdpter类实例注册到驱动管理器;创建连接单元,用于通过所述驱动管理器中注册的DriverAdpter类实例创建数据库的连接对象;注销单元,用于从所述驱动管理器中注销当前的DriverAdpter类实例,以便进行下个版本驱动的动态加载。优选的,所述系统还包括:操作单元,用于通过各连接对象操作对应版本驱动下的数据库;关闭释放单元,用于对于完成数据库操作的对应版本,关闭并释放对应的连接对象。本专利技术的有益效果是:本专利技术提供的一种同一数据库多个版本JDBC驱动共存方法和系统中,通过URLClassLoader动态加载驱动类,且多个不同的版本分别对应有不同的URLClassLoader,并对驱动进行动态注册和注销,实现了同时加载和注册一种数据库多个版本的驱动;同时使用DriverAdpter类封装驱动类实例,绕过了动态加载类时驱动管理器对于类加载器的限制,从而使java应用可以同时访问一种数据库的不同版本,使同一种数据库的不同版本之间的数据交换和集成得以方便的实现。【附图说明】为了更清楚地说明本专利技术实施例的技术方案,下面将对本专利技术实施例中所需要使用的附图作简单地介绍。显而易见地,下面所描述的附图仅仅是本专利技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1为本专利技术实施例提供的JDBC访问数据库的工作原理示意图;图2为现有的一种使用JDBC访问数据库的方法流程图;图3为现有的一种使用JDBC访问数据库时JDBC的调用示意图;图4为本专利技术实本文档来自技高网
...

【技术保护点】
1.一种同一数据库多个版本JDBC驱动共存方法,其特征在于,包括:通过URLClassLoader动态加载驱动类;通过动态加载的驱动类,动态创建驱动类实例;使用DriverAdpter类封装原始的所述驱动类实例以得到DriverAdpter类实例,并将所述DriverAdpter类实例注册到驱动管理器;通过所述驱动管理器中注册的DriverAdpter类实例创建数据库的连接对象;从所述驱动管理器中注销当前的DriverAdpter类实例,以便进行下个版本驱动的动态加载;其中,对于多个不同版本的JDBC驱动,分别使用不同的URLClassLoader进行驱动类的加载,以便创建不同版本的驱动类实例。

【技术特征摘要】
1.一种同一数据库多个版本JDBC驱动共存方法,其特征在于,包括:通过URLClassLoader动态加载驱动类;通过动态加载的驱动类,动态创建驱动类实例;使用DriverAdpter类封装原始的所述驱动类实例以得到DriverAdpter类实例,并将所述DriverAdpter类实例注册到驱动管理器;通过所述驱动管理器中注册的DriverAdpter类实例创建数据库的连接对象;从所述驱动管理器中注销当前的DriverAdpter类实例,以便进行下个版本驱动的动态加载;其中,对于多个不同版本的JDBC驱动,分别使用不同的URLClassLoader进行驱动类的加载,以便创建不同版本的驱动类实例。2.根据权利要求1所述的同一数据库多个版本JDBC驱动共存方法,其特征在于,在所述从所述驱动管理器中注销当前的DriverAdpter类实例之后,所述方法还包括:通过各连接对象操作对应版本驱动下的数据库;对于完成数据库操作的对应版本,关闭并释放对应的连接对象。3.根据权利要求1所述的同一数据库多个版本JDBC驱动共存方法,其特征在于,所述通过所述驱动管理器中注册的DriverAdpter类实例创建数据库的连接对象,具体为:所述驱动管理器调用已经注册的DriverAdpter类实例的acceptsURL方法;如果acceptsURL方法返回true且通过类加载器的检查,则利用对应的DriverAdpter类实例创建数据库的连接对象。4.根据权利要求3所述的同一数据库多个版本JDBC驱动共存方法,其特征在于,所述类加载器的检查具体为:所述驱动管理器检查AppClassLoader是否能够加载到由URLClassLoader动态加载的驱动类,如果不能加载则报错;如果能加载则通过对类加载器的检查。5.根据权利要求4所述的同一数据库多个版本JDBC驱动...

【专利技术属性】
技术研发人员:梅纲付铨高东升付博文
申请(专利权)人:武汉达梦数据库有限公司
类型:发明
国别省市:湖北,42

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1