问题是这样:
1、程序需要连接多个的数据库;
2、数据库有多种,可能存在一样的,如两个Oracle,一个DB2;
3、数据库版本不一样,如可能有Oracle8i,9i,10G等;问题是:如何通过动态加载数据库驱动,达到连接多个数据库的目的。ps:分不够另外开贴发。先谢谢各位了。
1、程序需要连接多个的数据库;
2、数据库有多种,可能存在一样的,如两个Oracle,一个DB2;
3、数据库版本不一样,如可能有Oracle8i,9i,10G等;问题是:如何通过动态加载数据库驱动,达到连接多个数据库的目的。ps:分不够另外开贴发。先谢谢各位了。
1、程序只有一个,应用也只有一个;
2、连接的数据库有多个、多种;
3、如果把所有版本、种类的数据库驱动放在/APP/lib下,肯定会有打架的问题;文笔不好,见谅!!
配置不同数据库的连接字符串就可以了。
然后根据需要使用即可。
用资源文件会比较好些!
在资源文件中可以定义好一些KEY然后把你要加载的驱动添加然后按KEY
读取
供参考
技术要求:1.精通1门以上(包括1门)开发语言。会.net、Java、C语言者优先。
2.精通1种以上(包括1种)数据库。
有项目管理经验者优先。
学历要求:大专以上(包括大专),如果是自学考试的情况下,需要有学位证书。
工作地点:东京、关东地区、名古屋、京都等待遇情况:月工资:25-40万日元
加班费: 每天平均勤务8小时以上加班费为1800日元以上/H。例:当月勤务时间为260小时,工作日为20天的情况下,加班费为:18万日元。
年休假: 10天以上
保 险: 日本和国内(当将个人档案调到大连本社时)都有保险
其 他: 每年2次员工旅游(目前组织过的旅游地:冲绳2次、韩国1次、今年到塞班)
员工聚会平均1.5个月一次(公司报销路费和会餐费)。
报销在日本业余时间学习日语的费用等
公司有公寓人力资源顾问:文先生
Email:[email protected]
Tel:0411-84509856/84509836
Mob:13889497710
1、JDBC驱动并不是兼容的,比如说9i的小版本号除.1.30的并不适合8i的驱动;
这种例子还很多;10G的也不兼容9和8;(to:lianhg(lianhg) )
2、jar包加载进来,对于相同的数据库驱动,不同版本的串是一样的,但各个
不同版本的驱动不能互为使用,所以不能直接加载。(to:manyroads(凉茶不二碗) )
3、to:alex9521(断--言),你的资源文件怎么定义?KEY值是否也是定义到驱动串?
这问题又回到第一第二了。
1、JDBC驱动并不是兼容的,比如说9i的小版本号除.1.30的并不适合8i的驱动;
这种例子还很多;10G的也不兼容9和8;(to:lianhg(lianhg) )-- 10G不能访问 8i 和 9i ?!
是的,有些小版本并不兼容,问题在与,我们并不知道
需要连接的数据库是什么版本,所以,必须全部适用;
请问,所有的数据库驱动(不同种类,不同版本)放哪儿?
可以参考一下吧
想象Tomcat或者WebLogic是怎样管理多个WebApp的。
这样,如果将jar包放在一起,数据库不同还好说,如果相同,就坏了,肯定有一个加载的不对。(比如lz说的Oracle不同版本的驱动不向下兼容)解决办法:自己写一个ClassLoader或者使用现成的ClassLoader,我建议使用现成的URLClassLoader,然后将不同版本的驱动包解压缩(因为URLClassLoader没办法加载jar包中的类),放在不同的目录下,比如C:\\oracle9\\driver和C:\\oracle10\\driver,然后将创建两个URLClassLoader实例,将他们的加载目录设置为上面的两个目录,在需要加载数据库的时候,就可以使用DriverManager.registerDriver(driver)注册两个驱动了,但是具体能不能使用,我还没有试过,lz可以尝试一下。
上面的方法至少解决了驱动类混淆的问题^_^
DriverManager.registerDriver((Driver)driver9i.newInstance())
10i的做法是一样的
这两天出差,没有及时查看,不好意思。
感觉你的想法蛮有建设性的,马上试一下,可以就给分。
没试出来,不知道哪个环节出错,我一会贴代码;
TO:zhwh(韩信),
你的想法刚好跟我一样,不知道有没有更完整一点的想法?
webapp
|-lib
|-oracle10g
代码如下:
/*************************************************/
URL u = new URL("file:lib/oracle10g");
URLClassLoader oracle10g = new URLClassLoader(new URL[]{u});
Class c = oracle10g.loadClass("oracle.jdbc.driver.OracleDriver");
driver = (Driver)c.newInstance();
DriverManager.registerDriver(driver);
conn = DriverManager.getConnection(connStr, usr, pwd);System.out.println(conn.toString());
/*************************************************/运行结果:
java.sql.SQLException: Io 异常: The Network Adapter could not establish the connection
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:124)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:161)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:273)
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:327)
at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:347)
at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:150)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:31)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:563)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at com.test.ProcConnTest.main(ProcConnTest.java:37)
java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at com.test.ProcConnTest.main(ProcConnTest.java:34)在我看来,URLClassLoader似乎没有起到作用。
37、34行各是哪行?知道哪行出错才好弄