Как запустить SQL скрипт в JDB C без iBatis? - PullRequest
0 голосов
/ 27 февраля 2020

У меня есть этот код с iBatis:

  try {
        Class.forName(JDBC_DRIVER);
        connection = DriverManager.getConnection(DB_URL, USER, PASS);
        ScriptRunner sr = new ScriptRunner(connection);
        sr.setAutoCommit(true);
        Reader reader1 = new BufferedReader(new FileReader("start.sql"));
        Reader reader2 = new BufferedReader(new FileReader("create.sql"));

        sr.runScript(reader1);
        sr.runScript(reader2);
        connection.close();
    } catch (SQLException se) {
        se.printStackTrace();
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {
            if (connection != null) connection.close();
        } catch (SQLException se) {
            se.printStackTrace();
        }

И он работает, но мне нужно запустить этот скрипт без использования iBatis.

Есть идеи?

Ответы [ 3 ]

1 голос
/ 27 февраля 2020
  1. чтение. sql файл в виде строки
  2. разбиение каждого sql на ArrayList, а затем повторение
  3. Использование оператора для выполнения пакетного sql в sql транзакция
  4. доступ к SQL с аргументами rewriteBatchedStatements = true , вы можете выполнить пакетно sql

будет выглядеть так:

connection.setAutoCommit(false); // start Tx
Statement statement = connection.createStatement();
for(String sql : sqlStrings){
  statement.addBatch(sql);       // batched sql
}
statement.executeBatch()
connection.commit()
0 голосов
/ 13 марта 2020

Если вы можете использовать сторонние библиотеки, попробуйте мою: Добавьте зависимость maven: <dependency> <groupId>com.github.buckelieg</groupId> <artifactId>db-fn</artifactId> <version>0.3.4</version> </dependency>

и используйте код: db.script(new File("path/to/script.sql")).timeout(60).execute();

Подробнее здесь

0 голосов
/ 27 февраля 2020

Вам нужно прочитать .sql файл как String, а затем разделить его на разделитель ; и выполнить последовательно.

...