首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2ME开发 >

关于jdbc连接Oracle解决办法

2013-01-25 
关于jdbc连接OracleXXXClass.class.getClassLoader().loadClass(oracle.jdbc.driver.OracleDriver)上面

关于jdbc连接Oracle

XXXClass.class.getClassLoader().loadClass("oracle.jdbc.driver.OracleDriver");

上面为什么不能成功注册oracle驱动,注册oracle驱动只能用下面的方法吗?
DriverManager.registerDriver(new OracleDriver());


在注册mysql的驱动的时候,可以用
XXXClass.class.getClassLoader().loadClass("oracle.jdbc.driver.OracleDriver");


有没有其他的更好的注册oracle驱动的方法?
[解决办法]
ORACLE的一般都是这样吧:Class.forName("oracle.jdbc.driver.OracleDriver"),自动的向DriverManager注册了,不再需要显式的调用DriverManager.registerDriver()方法了,直接就可以利用Connection conn = DriverManager.getConnection(****)连接到数据库了
[解决办法]
首先要根据你的ORACLE 版本加相应的驱动包,然后

 Class.forName("oracle.jdbc.driver.OracleDriver");
 Connection conn=DriverManager.getConnection("jdbc:oracle:thin:@数据库服务器名:1521:数据库实例名", "用户名", "密码");
  Statement stm=conn.createStatement();

[解决办法]
看看的方法的返回类型不久明白了吗?

[解决办法]
Class.forName("..");
返回值是:Class<?>
表示一个没有具体指定类型的类
[解决办法]
Class.forName 和 ClassLoader.loadClass 两个方法都是用来动态加载类的
区别:
1.Class.forName方法,除非你显式的制定class loader,都是使用当前代码所在类的class loader来加载的。而XXXClass.class.getClassLoader().loadClass,就是指定要用XXXClass的class loader来加载,可能与当前代码所在类的class loader不同

2.直接导致你加载oracle驱动失败的原因是,Class.forName方法会自动初始化类,也就是说会执行类的静态初始化块 static{},但是ClassLoader.loadClass默认不会这么做。而oracle的JDBC驱动的加载就是在该类的静态初始化块里完成的(执行了DriverManager.registerDriver()),因此你用ClassLoader.loadClass会失败
[解决办法]
7楼说得对

热点排行