Java 回滚后无法重用jdbc连接
我在我的应用程序中使用了一个简单的JDBC程序,将一些数据插入到oracle表中。它在积极的情况下运行良好,但在消极的情况下不工作,并且在异常发生时我禁用了约束问题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
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()
不会删除插入的数据