包装在 Java 中 在 50 个块中生成.sql语句

  • 本文关键字:sql 语句 Java 包装 java
  • 更新时间 :
  • 英文 :


我有一个读取文件并生成sql插入语句的应用程序。现在我想将 50 个语句合并到一个块中:

我的解决方案不起作用并且不完整,因为可能存在只有 37 个状态的情况,但在我的情况下,缺少FROM DUAL; COMMIT;

我有点困住了。我想知道一种正确的方法,合并 50 个语句的数量,当剩下的语句更少时,因为它们是最后一个语句,它们也应该合并。

也许有人有一些想法?

架构/输出

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

代码(提取)

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())); }

您可以将第一个和最后一个语句移出循环:

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;");

做下面的事情

 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())); }

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

最新更新