首页  »   J2ME

关于jdbc连接Oracle解决办法

网友分享于:2015-08-27  浏览:12次
关于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楼说得对

相关解决方案

最新解决方案