2016-04-26 36 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())); } 

,或者您也可以将循环中的提交添加到您的语句中。