日期:2014-05-20 浏览次数:20664 次
XXXClass.class.getClassLoader().loadClass("oracle.jdbc.driver.OracleDriver");
DriverManager.registerDriver(new OracleDriver());
XXXClass.class.getClassLoader().loadClass("oracle.jdbc.driver.OracleDriver");
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楼说得对