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(****)连接到数据库了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楼说得对
Class.forName("..");
返回值是:Class<?>
表示一个没有具体指定类型的类看看的方法的返回类型不久明白了吗?
首先要根据你的ORACLE 版本加相应的驱动包,然后
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn=DriverManager.getConnection("jdbc:oracle:thin:@数据库服务器名:1521:数据库实例名", "用户名", "密码");
Statement stm=conn.createStatement();