我正在使用HSQLDB。在一個java函數內部,我創建了一個臨時表並用一些數據填充它。在我用臨時表中的數據更新常規表格之後。HSQLDB:我試圖從臨時表中填充一些數據,但數據正在被刪除
如果我調試函數內部的代碼並執行SELECT
我可以看到數據確實在兩個表中都有更新,但在提交更改之後表不再更新! (常規表格,而不是臨時表格)。
當我創建我使用的臨時表:ON COMMIT PRESERVE ROWS
但它沒有幫助。
有誰知道爲什麼會發生這種情況?
謝謝!
下面是代碼:
public synchronized void foo(String[] objectsToMark) throws Exception {
String createTempTableQuery = "CREATE TEMP TABLE "+TEMP_TABLE_NAME+"(OBJECTID VARCHAR) " +
"ON COMMIT PRESERVE ROWS";
String dropTempTableQuery = "DROP TABLE "+TEMP_TABLE_NAME;
String updateQueryString = "update " + TABlE_A + " set " +TABlE_A+".X = 'N' where "+TABlE_A+".RESULT_ID in (select "+TABlE_A+".RESULT_ID FROM "+TABlE_A
+" inner join "+TABLE_B+" on "+TABLE_B+".OBJECTID = "+TABlE_A+".OBJECTID"
+" inner join TEMP_TABLE on "+TABLE_B+".OBJECTID = TEMP_TABLE.OBJECTID"
+" where "+TABlE_A+".IS_X = 'Y')";
String insertObjectIDs = "INSERT INTO " + TEMP_TABLE_NAME + " (OBJECTID) VALUES (?)";
Connection conn = null;
Statement stmt = null;
PreparedStatement psInsertObjectIDs = null;
try {
conn = getConnection(getClass().getName() + "");
stmt = conn.createStatement();
stmt.execute(createTempTableQuery);
// insert object's IDs into table
psInsertObjectIDs = conn.prepareStatement(insertObjectIDs);
for (String id : objectsToMark) {
int i = 0;
psInsertObjectIDs.setString(++i, id);
psInsertObjectIDs.addBatch();
}
psInsertObjectIDs.executeBatch();
stmt.execute(updateQueryString);
} catch (Exception e) {
} finally {
// close resources
close(stmt);
stmt = null;
// drop the temporary tables
if (conn != null) {
try {
stmt = conn.createStatement();
stmt.execute(dropTempTableQuery);
} catch (SQLException e) {
}
close(stmt);
}
close(psInsertObjectIDs);
closeConnection(conn);
}
}
注意,有沒有犯在這裏,但連接被配置爲執行自動提交。
請舉報代碼! – fredt 2012-04-22 20:05:02