java.lang.ClassCastException: oracle.jdbc.driver.T4CConnection 无法转换为 com.arjuna.ats.internal.arjuna.recovery.Connection

java.lang.ClassCastException: oracle.jdbc.driver.T4CConnection cannot be cast to com.arjuna.ats.internal.arjuna.recovery.Connection

我正在尝试开发一个连接到 Oracle 数据库的 Java EE 应用程序。 我正在使用 ojdbc6 罐子。我正在从 属性 文件中读取数据库信息。

package com.varun.util;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;

import com.arjuna.ats.internal.arjuna.recovery.Connection;

public class DbUtil {

    private static Connection connection = null;
    public static Connection getConnection(){
        if(connection!=null)
        {
            return connection;
        }
        else
        {
            try{

                Properties prop=new Properties();
                InputStream inputStream=DbUtil.class.getClassLoader().getResourceAsStream("/db.properties");
                prop.load(inputStream);
                String driver =  prop.getProperty("driver");
                String url = prop.getProperty("url");
                String user = prop.getProperty("user");
                String password = prop.getProperty("password");
                Class.forName(driver);
                connection = (Connection) DriverManager.getConnection(url, user, password);

            }catch(ClassNotFoundException e)
            {
                 e.printStackTrace();
            }
            catch (SQLException e) {
                e.printStackTrace();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return connection;
        }
    }

}

我收到一条异常消息:

java.lang.ClassCastException: oracle.jdbc.driver.T4CConnection cannot be cast to com.arjuna.ats.internal.arjuna.recovery.Connection

我没有找到根本原因。我也更改了 jar 文件,但它仍然抛出相同的错误。

修复 Connection 的导入问题。不能是 com.arjuna.ats.internal.arjuna.recovery.Connection.

DriverManager.getConnection(url, user, password) returns 'oracle.jdbc.driver.T4CConnection' 的实例,而您正试图将其转换为 'com.arjuna.ats.internal.arjuna.recovery.Connection'。这就是您出错的原因。

我认为问题出在您的导入上,请检查您的代码中是否有此导入:

import com.arjuna.ats.internal.arjuna.recovery.Connection;

应该是:

import java.sql.Connection;

看看This tutorial

尝试从

更改导入
import com.arjuna.ats.internal.arjuna.recovery.Connection;

import java.sql.Connection;

导入有问题。

use java.sql.Connection.

问题已解决。