2015-02-11 61 views
2

我試圖從一個表插入大量數據到另一個表。這兩張桌子在不同的地區。當我插入數據時,ID(我用來創建連接)能夠插入少數行數據。如果它插入超過500行的數據,則會拋出異常插入大量數據時出現Java SQL異常

com.ibm.db2.jcc.b.SqlException:DB2 SQL錯誤:SQLCODE:-551,SQLSTATE:42501,SQLERRMC:DB2GCS; EXECUTE PACKAGE; NULLID。 SYSLH203。

我無法找到爲什麼它顯示授權異常,如果數據更多的相同的ID。

My Code Snippet : 
while(RSet.next()){ 
      stmt=test_conn.prepareStatement("Insert Query"); 
      for(int i=1;i<=columnCount;i++){ 
       stmt.setString(i,RSet.getString(i)); 
      } 
      stmt.addBatch();; 
     } 
     stmt.executeBatch(); 

在此先感謝您的幫助。

回答

1

您的代碼實際上沒有正確配料,這可能是它破裂的原因。問題在於你無需重複地準備插入查詢。

你需要外循環只有一次準備像

test_conn.setAutoCommit(false); 
stmt = test_conn.prepareStatement("INSERT INTO ..."); 

while(RSet.next()){ 
    for(int i = 1; i <= columnCount; i++){ 
     stmt.setString(i, RSet.getString(i)); 
    } 
    stmt.addBatch(); 
} 

stmt.executeBatch(); 
test_conn.commit(); 
+0

感謝您的幫助了很多拉維。但是在做出你所建議的更改之後,插入400條記錄仍需要大約3-4分鐘。這可以做得更快嗎? – 2015-02-12 08:17:42

+0

您需要對應用程序進行配置以查看瓶頸在哪裏;在Java中,或在數據庫中。您可以在執行之前和之後使用'System.currentTimeMillis()'(並減去這些值)以查找應用程序正在執行的3到4分鐘內該批處理的確切時間。 – 2015-02-12 08:24:43