我正在尝试通过registerDriver();方法加载Type-2(Native API)驱动程序。但它说OracleDataSource不能转换为Driver。
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Enumeration;
public class Driver2_Load2
{
public static void main(String[] args) throws SQLException
{
oracle.jdbc.pool.OracleDataSource d = new oracle.jdbc.pool.OracleDataSource();
DriverManager.registerDriver(d);
Enumeration e = DriverManager.getDrivers();
if(e.hasMoreElements())
{
System.out.println(e.nextElement());
}
}
}然后我尝试了类型转换:
oracle.jdbc.pool.OracleDataSource d = new oracle.jdbc.pool.OracleDataSource();
DriverManager.registerDriver((Driver) d);但是它抛出了一个异常,java.lang.ClassCastException: oracle.jdbc.pool.OracleDataSource cannot be cast to java.sql.Driver
要运行:-
set classpath=;D:\ORACLE-11g\app\oracle\product\11.2.0\server\jdbc\lib\ojdbc6.jar;
javac Driver2_Load2.java
java Driver2_Load2发布于 2018-05-20 17:18:46
加载类型2驱动程序与加载类型4驱动程序没有区别,因为实际的驱动程序类总是相同的。Type2驱动程序还需要安装完整的Oracle客户机(与Type4驱动程序相反,后者只需要.jar文件)
对于任何现代的Java和驱动程序版本,都不需要调用registerDriver()或class.forName()。您所需要做的就是使用oci协议而不是thin协议提供连接URL。
使用驱动程序协议oci:jdbc:oracle:oci:...建立As documented in the manual连接
因此,要创建OCI连接,您需要在URL中指定:
DriverManager.getConnection("jdbc:oracle:oci:@//localhost:1521/orcl", "hr", "hr");但是,要安装包含所有需要的all的Oracle客户机并使其可用于您的JVM,您需要,但是不需要调用registerDriver() (或Class.forName())。
关于您的代码:正如类名所示,oracle.jdbc.pool.OracleDataSource是javax.sql.DataSource的实现,而不是javax.sql.Driver。
registerDriver()需要java.sql.Driver的类名,而不是DataSource的类名。
Oracle驱动程序类是oracle.jdbc.OracleDriver。
无关,但是:为什么您认为首先需要OCI驱动程序?Oracle recommends使用瘦驱动程序,除非您有非常特殊的要求,例如,您需要在RAC环境中进行“透明应用程序故障转移”。
发布于 2018-05-20 15:05:32
参见https://docs.oracle.com/cd/F49540_01/DOC/java.815/a64685/basic1.htm,其语法为:
DriverManager.registerDriver (new oracle.jdbc.driver.OracleDriver()); https://stackoverflow.com/questions/50432071
复制相似问题