0

我與所有插入statments SQL腳本文件中像下面如何從腳本文件中的所有插入語句存儲到ArrayList中

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

如何存放每個statment分別爲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中?

+0

你可以做一個字符串sp點亮分號字符並以此方式構建數組列表。 – codechurn

回答

0

讓我們假設我們有

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); 
     } 
    } 
} 
+0

謝謝...非常有用 – Madhava

相關問題