Как выполнить файл сценария SQL в Java?

Я хочу выполнить файл сценария SQL в Java, не читая все содержание файла в большой запрос и выполняя его.

Есть ли какой-либо другой стандартный путь?

36
задан Samuel Liew 4 April 2018 в 05:38
поделиться

5 ответов

Нет портативного способа сделать это. Вы можете выполнить собственный клиент в качестве внешней программы, хотя:

import java.io.*;
public class CmdExec {

  public static void main(String argv[]) {
    try {
      String line;
      Process p = Runtime.getRuntime().exec
        ("psql -U username -d dbname -h serverhost -f scripfile.sql");
      BufferedReader input =
        new BufferedReader
          (new InputStreamReader(p.getInputStream()));
      while ((line = input.readLine()) != null) {
        System.out.println(line);
      }
      input.close();
    }
    catch (Exception err) {
      err.printStackTrace();
    }
  }
}
  • образец кода был извлечен из здесь и изменено, чтобы ответить на вопрос, предполагая, что пользователь хочет выполнить файл сценария PostgreSQL.
20
ответ дан 27 November 2019 в 05:51
поделиться

Нет, вы должны прочитать файл, разделить его в отдельные запросы, а затем выполнять их индивидуально (или использовать пакетную API jdbc).

Одной из причин является то, что каждая база данных определяет свой собственный путь к отдельным операторам SQL (некоторое использование ; , другие / , некоторые позволяют обоим или даже определять свой собственный сепаратор) Отказ

6
ответ дан 27 November 2019 в 05:51
поделиться

из для петли

на некоторых языках (не C или C ++) Переменная петли неизменной в Область применения тела петли, с любым попытаться изменить его значение рассматривается как семантическая ошибка. Такой Модификации иногда следствие ошибки программиста, что может быть очень сложно Определите один раз сделанный. Однако только слишком Изменения могут быть обнаружены компилятор. Ситуации, где то Адрес переменной петли пропускается Как аргумент подпрограммы сделать это очень трудно проверить, потому что поведение рутины в целом непознаваемый для компилятора.

Так что это, кажется, поможет вам не сжечь вашу руку позже.

-121--3765845-

Вы не можете сделать использование JDBC, так как он не поддерживает. Будут включать работу IBATIS IBATIS, является рамочной структурой настойчивости и позвонит конструктору Scriptrunner , как показано в документации IBATIS .

Это не очень хорошо включать в себя тяжелые весовые основы настойчивости, такие как IBATIS, чтобы запустить простые сценарии SQL любые способы, которые вы можете сделать с использованием командной строки

$ mysql -u root -p db_name < test.sql
3
ответ дан 27 November 2019 в 05:51
поделиться

JDBC не поддерживает эту опцию (хотя это может быть предложено конкретным драйвером БД). В любом случае, не должно быть проблем с загрузкой всего содержимого файла в память.

0
ответ дан 27 November 2019 в 05:51
поделиться

Существует отличный способ выполнять сценарии SQL из Java, не читая их самостоятельно, если вы не возражаете против зависимости от Ant. На мой взгляд, в вашем случае такая зависимость вполне оправдана. Вот пример кода, в котором класс SQLExec находится в ant.jar:

private void executeSql(String sqlFilePath) {
    final class SqlExecuter extends SQLExec {
        public SqlExecuter() {
            Project project = new Project();
            project.init();
            setProject(project);
            setTaskType("sql");
            setTaskName("sql");
        }
    }

    SqlExecuter executer = new SqlExecuter();
    executer.setSrc(new File(sqlFilePath));
    executer.setDriver(args.getDriver());
    executer.setPassword(args.getPwd());
    executer.setUserid(args.getUser());
    executer.setUrl(args.getUrl());
    executer.execute();
}
27
ответ дан 27 November 2019 в 05:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: