2011-05-18 83 views
1

我做的操作,首先刪除一條記錄,然後插入到這樣的同桌:時停止執行刪除和更新

String delete = "DELETE FROM t WHERE t.id = id" 
String insert = "INSERT INTO t VALUES (id, value1, value2)" 

Statement s = conn.createStatement(); 
s.executeUpdate(delete); 
s = conn.createStatement(); 
s.executeUpdate(insert); 

然後我的應用程序在執行插入語句後只是阻止那裏。根本沒有迴應。

確實有人知道發生了什麼事?

db是oracle 11g。

+1

「那麼我的應用程序就在那裏阻止」。嗯,請注意指出應用程序被屏蔽的哪一行? – 2011-05-18 20:35:03

回答

1

我找到了原因。 AUTOCOMMIT標誌被設置爲OFF。

+0

這是如何影響任何東西?除非您在單獨的會話中執行這兩個陳述,而這看起來不太可能,因爲您發佈的代碼示例不太可能。 – 2011-05-18 23:00:20

2

下面的代碼不需要WHERE子句,因爲您將從t中刪除所有記錄,其中id等於id。這是意圖還是你想刪除一個特定的ID?

DELETE FROM t WHERE t.id = id 
+0

不,我只想刪除一個 – Leon 2011-05-18 20:37:31

1

你濫用SQL語句

String delete = "DELETE FROM t WHERE t.id = ?" 
String insert = "INSERT INTO t VALUES (?, ?, ?)" 

PreparedStatement s = null; 
try{ 
    s = conn.prepareStatement(delete); 
    s.setNString(1,id); 
    s.executeUpdate(); 
}finally{if(s!=null)s.close();s = null;} 
try{ 
    s = conn.prepareStatement(insert); 
    s.setNString(1,id); 
    s.setNString(2,value1); 
    s.setNString(2,value2); 
    s.executeUpdate(); 
}finally{if(s!=null)s.close();s = null;} 
在你的代碼

你沒有從你的本地變量和通過什麼sql server不知道從哪裏得到id的值,value1和value2

1

s.executeUpdate(delete); 你確定你沒有在這裏得到一些SQLException,因爲這個「DELETE FROM t WHERE t.id = id」好像是無效的語句

0

如果數據庫在重DML期間暫停,可能是歸檔目標已滿。將檔案移至備份,數據庫將繼續。