2016-04-26 19 views
0

我有一個讀取文件並生成sql插入語句的應用程序。現在我想將50個語句合併到一個塊中:用Java編寫生成50個塊的.sql語句

我的解決方案不起作用並且不完整,因爲可能存在只有37個statemets的情況,但是在我的情況下存在FROM DUAL; COMMIT;丟失。

我有點遺留。我想知道一個合適的方法,合併多個50條語句,當剩下的條件較少時,因爲它們是最後一條語句,它們也應該合併。

也許有人有一些想法?

SCHEMA/輸出

INSERT 
     INTO 
     INTO 
     INTO.... (total 50 lines) 
FROM DUAL; 
COMMIT; 

CODE(摘錄)

final String template = "INTO %s (%s) VALUES (%s);"; 
List<String> statements = new ArrayList<>(); 

for (int i = 1; i < lines.size(); i++) { 

........ 

int counter = 0; 
if(counter == 0) {statements.add("INSERT"); } 
if(counter == 50) {statements.add("FROM DUAL;\nCOMMIT;"); counter = 0;} 
counter++; 
statements.add(String.format(template, tableN, cols.toString(), vals.toString())); } 
+0

你爲什麼不動'statements.add( 「FROM DUAL; \ nCOMMIT;」);'圈外,並在循環之後插入它? – dejvuth

回答

1

您可以移動的第一個和最後陳述圈外:

statements.add("INSERT"); 
for (int i = 1; i < lines.size(); i++) { 
    // ... 
    statements.add(String.format(template, tableN, cols.toString(), vals.toString())); 
} 
statements.add("FROM DUAL;\nCOMMIT;"); 
0

做類似下面

for (int i = 1; i < lines.size(); i++) { 

........ 

int counter = 0; 
if(counter == 0) {statements.add("INSERT"); } 
if(counter == lines.size) {statements.add("FROM DUAL;\nCOMMIT;"); counter = 0;} 
counter++; 
statements.add(String.format(template, tableN, cols.toString(), vals.toString())); } 

,或者您也可以將循環中的提交添加到您的語句中。