Java 回滚后无法重用jdbc连接

Java 回滚后无法重用jdbc连接,java,oracle,jdbc,Java,Oracle,Jdbc,我在我的应用程序中使用了一个简单的JDBC程序,将一些数据插入到oracle表中。它在积极的情况下运行良好,但在消极的情况下不工作,并且在异常发生时我禁用了约束问题 private static void loadDataContent(Connection conn, Map<String, String> disabledConstraints) throws SQLException,Exception { try{ disabl

我在我的应用程序中使用了一个简单的JDBC程序,将一些数据插入到oracle表中。它在积极的情况下运行良好,但在消极的情况下不工作,并且在异常发生时我禁用了约束问题

private static void loadDataContent(Connection conn,
            Map<String, String> disabledConstraints) throws SQLException,Exception {
    try{
        disabledConstraints = DataAccess.disableAllConstraints(conn);
        DataAccess.insertDataToTables(conn);
        DataAccess.enableConstraints(conn, disabledConstraints);// getting Exception
    }catch(Exception e){
        if(conn !=null){
            conn.rollback();
            try{
                if(disabledConstraints != null)
                    DataAccess.enableConstraints(conn, disabledConstraints);//getting same Exception in this line after rollback 
            }catch(Exception exception){
                log.fatal("Exception occured while enabling constraints: " + disabledConstraints);
            }
        }
        throw e;
    }
}
下面是我从主类调用的代码片段

try{
    Connection conn=getConnection();
    conn.setAutoCommit(false);
    loadDataContent(conn, disabledConstraints);
    conn.commit();

}catch(Exception e){
    if(conn !=null){
        conn.rollback();
    }

    throw e;
}finally{
    DatabaseUtil.closeDatabaseConnections(conn);

} 
当任何异常发生时,我在下面的代码中遇到问题

private static void loadDataContent(Connection conn,
            Map<String, String> disabledConstraints) throws SQLException,Exception {
    try{
        disabledConstraints = DataAccess.disableAllConstraints(conn);
        DataAccess.insertDataToTables(conn);
        DataAccess.enableConstraints(conn, disabledConstraints);// getting Exception
    }catch(Exception e){
        if(conn !=null){
            conn.rollback();
            try{
                if(disabledConstraints != null)
                    DataAccess.enableConstraints(conn, disabledConstraints);//getting same Exception in this line after rollback 
            }catch(Exception exception){
                log.fatal("Exception occured while enabling constraints: " + disabledConstraints);
            }
        }
        throw e;
    }
}
我得到的异常是ORA-02298:无法验证-未找到父密钥


我需要一个关于我做错了什么的建议。

您插入的数据似乎违反了外键-constraint@Chris是的,我知道插入的数据违反外键约束,但这不是问题。问题是回滚后我无法重用jdbc连接。@neerja bharti:ahh ok。现在我明白了。您的
DataAccess.disableAllConstraints(conn)是否存在问题提交连接?和/或
DataAccess.insertDataToTables(conn)
?@Chris否。方法
DataAccess.disableAllConstraints(conn)
没有提交连接,因为主类有提交。请参阅第一段代码。@neerja bharti:DDL语句隐式提交连接。因此,如果可以启用一个约束,则会提交连接。假设第一个约束可以启用,第二个约束的启用失败,连接已提交并且
rollback()
不删除插入的数据插入的数据似乎违反了外键-constraint@Chris是的,我知道插入的数据违反外键约束,但这不是问题。问题是回滚后我无法重用jdbc连接。@neerja bharti:ahh ok。现在我明白了。您的
DataAccess.disableAllConstraints(conn)是否存在问题提交连接?和/或
DataAccess.insertDataToTables(conn)
?@Chris否。方法
DataAccess.disableAllConstraints(conn)
没有提交连接,因为主类有提交。请参阅第一段代码。@neerja bharti:DDL语句隐式提交连接。因此,如果可以启用一个约束,则会提交连接。假设第一个约束可以启用,第二个约束的启用失败,连接被提交,并且
rollback()
不会删除插入的数据