Как передать команды mysql в ProcessBuilder - PullRequest
0 голосов
/ 22 января 2019

Вот что у меня есть:

List<String> restoreCmds = new ArrayList<>();
restoreCmds.add("mysql");
restoreCmds.add("-h" + host);
restoreCmds.add("-u" + login);
restoreCmds.add("-p" + pass);
restoreCmds.add("-e 'source dump.sql'");
restoreCmds.add(targetDB);

ProcessBuilder pb = new ProcessBuilder(restoreCmds);
pb.redirectOutput(Redirect.INHERIT);
pb.redirectError(Redirect.INHERIT);
Process pr = pb.start();

int exitVal = pr.waitFor()

Я получаю следующую ошибку:

ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''source dump.sql'' at line 1

Ответы [ 2 ]

0 голосов
/ 22 января 2019

Опция -e используется для непосредственного выполнения указанной команды, как вы можете видеть в руководстве:

- оператор execute =, оператор -e

Выполнить оператор и выйти. Отключает --force и файл истории. Формат вывода по умолчанию такой же, как и в --batch.

Вы должны использовать перенаправление ввода, чтобы использовать исходный файл с sql для выполнения.

ВНИМАНИЕ: кроме того, вы должны указать имя базы данных, с которой хотите работать.

0 голосов
/ 22 января 2019

Вам не нужно добавлять цитату для источника.

Я изменил строку на следующую, и она работает для меня.

restoreCmds.add("-e source dump.sql");
...