对表里字段类型为:DATE
不同版本的OJDBC驱动包使用getObject出来的类型不同。
ojdbc14_10_2_0_4.jar出来的是java.sql.Date
ojdbc14.jar出来的是java.sql.Timestamp
但是有的时候,同一个应用里面要访问不同版本的ORACLE数据库,这时就需要同一个应用里面加载两个版本的OJDBC。
A1
public class A1 {
public static void test1() throws Exception {
URL[] urls=new URL[2];
urls[0]=new File("E:\\workspace-nfjd\\testrealpath\\work\\ojdbc14.jar").toURL();
urls[1]=new File("E:\\workspace-nfjd\\testrealpath\\build\\").toURL();
URLClassLoader cl1=new URLClassLoader(urls, null);
cl1.loadClass("oracle.jdbc.OracleDriver").newInstance();
Object obj1=cl1.loadClass("JdbcTest").newInstance();
Method m1 = obj1.getClass().getMethod("executeJdbc", new Class[]{});
m1.invoke(obj1,new Object[]{});
}
public static void test2() throws Exception {
URL[] urls=new URL[2];
urls[0]=new File("E:\\workspace-nfjd\\testrealpath\\build\\ojdbc14_10_2_0_4.jar").toURL();
urls[1]=new File("E:\\workspace-nfjd\\testrealpath\\build\\").toURL();
URLClassLoader cl1=new URLClassLoader(urls, null);
cl1.loadClass("oracle.jdbc.OracleDriver").newInstance();
Object obj1=cl1.loadClass("JdbcTest").newInstance();
Method m1 = obj1.getClass().getMethod("executeJdbc", new Class[]{});
m1.invoke(obj1,new Object[]{});
}
public static void main(String[] args) throws Exception {
test1();
test2();
}
}
JdbcTest
public class JdbcTest {
static{
}
public void executeJdbc() {
try {
System.out.println(JdbcTest.class.getClassLoader());
Connection conn = null;
PreparedStatement ptmt = null;
ResultSet rs = null;
conn = DriverManager.getConnection("jdbc:oracle:thin:@10.1.252.80:1521:newngboss", "so1", "so1");
ptmt = conn
.prepareStatement("select ROWID,t.* from BAT_PRE_AUTHOR_TMP t where mod(BAT_PRE_AUTHOR_TMP_ID,2)=1 and check_state=1 and rownum <=100 ");
ptmt.setFetchSize(100);
rs = ptmt.executeQuery();
A1 a = null;
while (rs.next()) {
System.out.println(rs.getObject("VALID_DATE").getClass());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
注:
一、java.sql.Connection、java.sql.DriverManager加载了几份?
System.out.println(Connection.class.getClassLoader()+":"+ conn+"==="+conn.getClass().getClassLoader());
结果为:
null:oracle.jdbc.driver.OracleConnection@12a0f6c===java.net.URLClassLoader@4f1d0d
null:oracle.jdbc.driver.T4CConnection@ce2187===java.net.URLClassLoader@1f78ef1
所以:
Connection的加载器还是JRE的加载器
Connection的实例加载器是自己的加载器
所以只加载了一份,其还是由JRE的加载器加载。
二、java.sql.DriverManager里面的getCallerClass(callerCL, di.driverClassName ) != di.driverClass作用是?
因为DriverManager只有一个实例,在加载JDBC驱动时,都会执行DriverManager.registerDriver(m_defaultDriver);即会将所有类加载器加载的驱动放入DriverManager.readDrivers里面。
为了保证各个类加载器里面的JDBC实例互不影响,所以在getConnection、getDrivers、getDriver时,通过if (getCallerClass(callerCL, di.driverClassName ) != di.driverClass )过滤了不是自己类加载器加载的驱动。
三、
urls[0]=new URL("file:///E:/workspace-nfjd/testrealpath/work/ojdbc14.jar");
urls[0]=new File("E:\\workspace-nfjd\\testrealpath\\work\\ojdbc14.jar").toURL();
以上两个是等价的。即URL必须协议开头。
最好用:
urls[0]=new File("E:\\workspace-nfjd\\testrealpath\\build\\ojdbc14_10_2_0_4.jar").toURI().toURL();
因为第二种过时了。
分享到:
相关推荐
在本压缩包中,包含了两个关键文件:“ojdbc6-ojdbc6”可能是驱动的详细说明或者配置指南,而“oracle-jdbc.jar”则是实际的JDBC驱动程序库。 首先,让我们详细了解一下JDBC(Java Database Connectivity)驱动。...
从oracle官网收集的各版本的jdbc驱动包:ojdbc12_9.0.1.4--ojdbc14_9.2.0.8;ojdbc14_10.1.0.5--ojdbc14_10.2.0.5;ojdbc6_11.2.0.1--ojdbc6_11.2.0.4;ojdbc6_12.1.0.1--ojdbc8_12.2.0.1
Oracle各版本驱动包,有需要的可以下载使用,支持目前常用的不同版本oracle和JDK,根据自己需要调整和使用 主要包括的jar有: ojdbc5.jar 适用JDK版本:JDK 1.5 对应Oracle数据库版本:Oracle数据库版本(如Oracle ...
Oracle-ojdbc最新驱动 ojdbc14-10.2.0.4.0.jar 是Oracle数据库连接Java应用程序的重要组件,它是Oracle公司提供的JDBC(Java Database Connectivity)驱动程序。JDBC是Java平台上的一个标准接口,它允许Java应用程序...
当应用程序需要同时连接到多个相同类型的数据库,例如Oracle 11g和Oracle 19c,而这两个版本的JDBC驱动并不完全兼容时,我们需要自定义加载策略来处理这种情况。Oracle 11g和19c的JDBC驱动(ojdbc)可能具有不同的类...
oracle-11g-ojdbc6-11.2.0.4驱动jar包 <!-- oracle 驱动 --> <groupId>com.oracle.ojdbc</groupId> <artifactId>ojdbc6 <version>11.2.0.4 </dependency>
oracle-11g-ojdbc8-19.3.0.0驱动包 <!-- oracle 驱动 --> <groupId>com.oracle.ojdbc</groupId> <artifactId>ojdbc8 <version>19.3.0.0 </dependency>
在本文中,我们将深入探讨Oracle JDBC驱动的两个版本——ojdbc6-11.2.0.2和ojdbc6-11.2.0.4,以及它们在Java开发中的应用。 首先,JDBC(Java Database Connectivity)是Java平台的标准API,用于与各种类型的数据库...
Oracle驱动包`ojdbc6-11.2.0.4.0-atlassian-hosted.jar`是Oracle公司为Java应用程序提供的一种数据库连接驱动,主要用于与Oracle数据库进行交互。这个驱动包是Oracle JDBC Thin驱动的特定版本,适用于Java 6环境。在...
这个版本的驱动符合Java SE 6(Java Development Kit, JDK 6)的规范,因此被称为ojdbc6。下面将详细介绍Oracle JDBC驱动的原理、使用方法以及ojdbc6-11.2.0.3版本的关键特性。 1. JDBC驱动类型: Oracle JDBC驱动...
spring-jdbc-oracle-ojdbc-1.0.0.jar 资源共享,有需要其他jar包的可以在评论留言,看到后我会陆续上传。
ojdbc6-11.2.0.3.jar和ojdbc6.jar是两个非常重要的Oracle JDBC驱动包,它们在Java开发中扮演着至关重要的角色。 ojdbc6-11.2.0.3.jar是Oracle JDBC驱动程序的一个特定版本,适用于Oracle数据库11g Release 2(11.2....
总的来说,"Oracle-ojdbc14-11.1.0.6.0 And ojdbc6.zip"这个压缩包提供了两个重要的Oracle JDBC驱动,使得Java开发者能够方便地连接并操作Oracle数据库。选择正确的驱动版本是关键,同时理解如何正确配置和使用这些...
`ojdbc6-11.2.0.1.0.jar`是Oracle JDBC驱动程序的一个版本,专为Java 6设计。这个特定的版本支持Oracle数据库11g Release 2,提供对SQL和PL/SQL的接口,以及事务处理、并发控制和其他数据库操作。 在Maven项目中,...
ojdbc6是Oracle JDBC驱动的第六个主要版本,适用于Java 6环境,支持Oracle数据库10g、11g及12c的部分版本。 在Java程序中,我们通常使用以下步骤来建立与Oracle数据库的连接: 1. 添加ojdbc6驱动到项目类路径:...
ojdbc6-11.2.0.1.0.jar文件是Oracle为Java应用程序提供的一个JDBC驱动包,专门用于连接Oracle 9.x版本的数据库。 1. JDBC(Java Database Connectivity):JDBC是Java语言中用来规范客户端程序如何访问数据库的应用...
在Java 7(JDK 7)时代,Oracle提供了两个主要的JDBC驱动版本:ojdbc6和ojdbc7。ojdbc6是针对JDK 6的驱动,而ojdbc7则是为JDK 7设计的。这两个驱动虽然都可以在JDK 6和JDK 7环境下运行,但ojdbc7包含了对JDK 7新特性...
2、之前使用ojdbc14.jar(不记得哪个版本了)批量插入10万条,实际只插入了3万多条,其它的丢失了,换ojdbc6.jar后,一次commit批量插入100万条也OK了。-----所以不推荐使用了 。。。 -----借鉴:ojdbc6.jar: 适用于...
ojdbc6-11.2.0.4.0-atlassian-hosted.jar是Oracle公司为Java应用程序提供的一个特定版本的JDBC驱动程序,用于连接到Oracle 11g数据库。这个版本的驱动包特别适用于Atlassian产品,如Jira、Confluence等,这些产品...
这个版本的驱动是Oracle 11g Release 2的一部分,它支持Java 6平台,因此被称为ojdbc6。在本文中,我们将深入探讨ojdbc6驱动的工作原理、安装与配置,以及如何在实际项目中使用。 1. **JDBC驱动概述** JDBC是Java...