【问题标题】:How to store all insert statements from the script file into Arraylist如何将脚本文件中的所有插入语句存储到 Arraylist
【发布时间】:2016-02-17 17:34:26
【问题描述】:

我有如下所有插入语句的 sql 脚本文件

 INSERT INTO PUBLIC.EMPLOYEE(ID, NAME) VALUES
    (1, 'Madhava'),
    (2, 'Rao'),
    (3, 'Tmr');  

    INSERT INTO PUBLIC.ADDRESS(ID, CITY) VALUES
    (1, 'Bangalore'),
    (2, 'Chirala'),
    (3, 'Pune'); 

如何将每个语句单独存储到 ArrayList 中,如下所示

 INSERT INTO PUBLIC.EMPLOYEE(ID, NAME) VALUES (1, 'Madhava');
INSERT INTO PUBLIC.EMPLOYEE(ID, NAME) VALUES  (2, 'Rao');
 INSERT INTO PUBLIC.ADDRESS(ID, CITY) VALUES(1, 'Bangalore');
INSERT INTO PUBLIC.ADDRESS(ID, CITY) VALUES(2, 'Chirala');

我如何解析 sql 文件并将每个语句单独存储到上面的 Arraylist 中?

【问题讨论】:

  • 您可以对分号字符进行字符串拆分,然后以这种方式构建数组列表。

标签: java arraylist collections fileinputstream fileoutputstream


【解决方案1】:

假设我们有

String data = 
          " INSERT INTO PUBLIC.EMPLOYEE(ID, NAME) VALUES\r\n"
        + "    (1, 'Madhava'),\r\n" + "    (2, 'Rao'),\r\n"
        + "    (3, 'Tmr');  \r\n" + "\r\n"
        + "    INSERT INTO PUBLIC.ADDRESS(ID, CITY) VALUES\r\n"
        + "    (1, 'Bangalore'),\r\n" + "    (2, 'Chirala'),\r\n"
        + "    (3, 'Pune'); ";
List<String> inserts = new ArrayList<>();
Scanner sc = new Scanner(data); //you can also use new Scanner(new File("location/of/your/textfile.sql"));

您的解决方案可能如下所示(我们使用空行将数据分成多个部分):

String command = "";
while (sc.hasNextLine()) {
    String line = sc.nextLine().trim();
    if (line.isEmpty() || command.isEmpty()) {
        command = line;
    } else {
        String values = line.replaceAll(",$", ";");//replace `,` at the end with ;
        inserts.add(command + " " + values);
    }
}

或者更简单(我们只需将命令设置为以“INSERT”开头的行并创建命令和非空行的串联):

String command = "";
while (sc.hasNextLine()) {
    String line = sc.nextLine().trim();
    //ignore empty lines
    if (!line.isEmpty()) {
        if (line.startsWith("INSERT ")) {
            command = line;
        } else {
            //lets change `),` to `);`
            String values = line.replaceAll(",$", ";");
            inserts.add(command + " " + values);
        }
    }
}

【讨论】:

  • 谢谢...很有用
猜你喜欢
  • 2015-03-23
  • 2020-05-09
  • 1970-01-01
  • 2020-03-19
  • 2020-07-27
  • 1970-01-01
  • 1970-01-01
  • 2014-11-28
  • 2011-12-25
相关资源
最近更新 更多