You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

运行时无法连接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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:41:11