要解决提及here的问题。
我们正在创建和使用2个相同的JDBC Singleton Connections(常规,代理)。
注意:我们这里没有处理多线程。
问题:
// Auto Commit false
// Singelton
Connection connection = getConnection(); //same
// Auto Commit true
// // Singelton
Connection proxyConnection= getConnection(); //same
PreparedStatement ps = null;
try{
connection.setAutoCommit(false);
//Step 1
String sql = getQuery();
ps = proxyConnection.prepareStatement(sql);
ps.executeUpdate();
.
.
//Step 2
// if I don't execute this step everything works fine.
sql = getTransctionQuery();
ps = connection.prepareStatement(sql);
ps.executeUpdate();
.
.
//Step 3
sql = getQuery();
ps = proxyConnection.prepareStatement(sql);
ps.executeUpdate(); // this line never completes (if Step 2 runs)
}catch(){
connection.rollback(); //Doesn’t rollback step 1 and understandably step 2.
}
finally{
connection.close(); //cleanup code
proxyConnection.close();
}
问题:
由于
答案 0 :(得分:0)
我不是这里的专家,但我曾经在运行查询时遇到Oracle DB问题,然后忘记提交(或取消)。所以我认为你在第2步之后没有提交的事实会锁定数据库以供下次访问。