我在将一些数据插入oracle表的应用程序中使用了一个简单的JDBC程序。它可以在积极的情况下正常工作,但不能在消极的情况下工作,并且在发生异常时我禁用了约束问题。
下面是我的代码片段,这些代码从主类中调用。
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;
}
}
在异常情况下,我无法调用DataAccess.enableConstraints
,并且它已禁用所有约束。回滚后写在catch块中的代码不起作用。为什么下面的代码给出与回滚之前得到它相同的异常。
if(disabledConstraints != null)
DataAccess.enableConstraints(conn, disabledConstraints);//getting same Exception in this line after rollback
我得到的异常是 ORA-02298:无法验证-未找到父键
我需要关于我做错了什么的建议。