2011-11-19 109 views
0

我有一個包含SQL「insert」語句的文件。我打開這個文件,讀取它,然後嘗試將它插入數據庫(表已經存在)。陳述的形式如下:H2中的SQL方言

Insert into table1 Select 1,.... 
Insert into table1 Select 2,.... 
Insert into table1 Select 3,.... 
; 

';'在一堆線後。

這些語句在實際的DB2服務器上工作正常,但在H2中不能工作。我也嘗試了MODE = DB2,但仍然無法工作。

爲了使它工作,我插入';'每行後。所以,語句變成了:

Insert into table1 select 1,....; 
Insert into table1 Select 2,....; 
Insert into table1 Select 3,....; 
; 

當我嘗試插入H2控制檯這些語句,它工作正常。但是在java程序中,由於連續兩次';'而出錯。

這個問題的解決方案?

+1

您需要單獨執行這些語句。 H2控制檯還單獨執行每個語句。 –

回答

1

我不能完全相信我理解你的後「選擇」會發生什麼,因爲我已經習慣了無論是「值(...)」或SELECT語句引用另一個表,通常可以雕琢成對於顯示的值,使用類似ROW_NUMBER()的單個語句。

如果您有大量插入,請嘗試使用PreparedStatement的addBatch()方法。它的執行速度很快,非常安全,對數據庫資源的影響最小(如語句緩存)。

con.setAutoCommit(false); 
PreparedStatement pstmt = con.prepareStatement("INSERT INTO table1 VALUES (?,?)"); 
pstmt.setInt(1, 1); 
pstmt.setString(2, "example"); 
pstmt.addBatch(); 
pstmt.setInt(1, 2); 
pstmt.setString(2, "I should really loop through an array here..."); 
pstmt.addBatch(); 
int[] updCnt = pstmt.executeBatch(); 
con.commit();