运行时无法连接Oracle数据库,遇ClassCastException异常求助
解决Oracle JDBC连接时的ClassCastException异常
你的代码抛出的ClassCastException问题根源很明确——你自定义的类名和JDBC的核心接口重名了!
你把自己的类命名为Connection,而JDK里已经有一个java.sql.Connection接口,这就导致编译器完全搞混了这两个类:
- 当你写
Connection con1=null;时,这里的Connection指的是你自己的connection.Connection类 - 但
DriverManager.getConnection()返回的是Oracle JDBC驱动实现的java.sql.Connection实例(也就是报错里的oracle.jdbc.driver.T4CConnection)
把一个JDBC标准连接实例强制转换成你自己的Connection类,自然会抛出类型转换异常。
解决办法
方案1:修改自定义类名(推荐)
这是最彻底的解决方式,把你的类名改成和JDK类不冲突的名字,比如OracleDBConnector:
package connection; import java.sql.*; public class OracleDBConnector { public static void main(String[] args) throws Exception { java.sql.Connection con1 = null; String driverClass = "oracle.jdbc.driver.OracleDriver"; Class.forName(driverClass); String url = "jdbc:oracle:thin:@LAPTOP-1CQ5FAGB:1521:XE"; String user = "system"; String passwd = "srpnk"; // 这里不需要强制转换,返回值本身就是java.sql.Connection类型 con1 = DriverManager.getConnection(url, user, passwd); System.out.println("Connected successfully!"); // 记得用完关闭连接,避免资源泄漏 if (con1 != null) { con1.close(); } } }
方案2:明确指定全限定类名(不推荐)
如果暂时不想改类名,你可以在代码中所有用到JDBC连接的地方都写全限定类名java.sql.Connection,消除歧义:
package connection; import java.sql.*; public class Connection { public static void main(String[] args) throws Exception { // 明确指定是java.sql.Connection java.sql.Connection con1=null; String c="oracle.jdbc.driver.OracleDriver"; Class.forName(c); String url="jdbc:oracle:thin:@LAPTOP-1CQ5FAGB:1521:XE"; String user="system"; String passwd="srpnk"; // 这里也用全限定类名明确类型(其实不需要强制转换) con1=(java.sql.Connection) DriverManager.getConnection(url, user, passwd); System.out.println("connected"); if(con1 != null) con1.close(); } }
额外提示
从JDBC 4.0开始,只要Oracle JDBC驱动jar包在你的项目类路径下,Class.forName("oracle.jdbc.driver.OracleDriver")这行代码可以省略——DriverManager会自动扫描并加载驱动类。
内容的提问来源于stack exchange,提问作者Nandhini S
相关产品推荐
相关产品推荐

