Не удалось запустить mysql-запрос в Java-приложении

112
10

Я хочу сделать резервную копию таблицы MYSQL с удаленного сервера на мой локальный сервер, и я должен сделать это в своем java-приложении. Я пытаюсь запустить запрос follwing, чтобы сделать это:

C:\Program Files\MySQL\MySQL Server 5.5\bin\mysqldump --opt --where = '1 limit 10' -h abcd -u root -proot удаленный DB удаленно | mysql -u root -pcanada localDB

Query запускает абсурдно отлично, когда я запускаю его через командную строку, но когда я запускаю его через приложение java, он не может создать резервную копию и, как ни странно, не показывает никакого вывода.

    public static void main(String[] args) {
Process p;
String s="C:\\Program Files\\MySQL\\MySQL Server 5.5\\bin\\mysqldump --opt " +
"--where='1 limit 1' -h a.b.c.d -u root -proot remoteDB remoteTable|mysql -u root -pcanada " +
"localDB";
try {
p = Runtime.getRuntime().exec(s );
p.waitFor();
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line=reader.readLine();

while (line != null) {
System.out.println(line);
line = reader.readLine();
}
}
catch (InterruptedException e) {
System.out.println("fsff"+e);
e.printStackTrace();
} catch (IOException e) {
System.out.println("fsdaf"+e);
e.printStackTrace();
}

}

Пожалуйста, может кто-нибудь предположить, почему я не запускаю его через приложение java.Thanks заранее :)

спросил(а) 2021-01-19T19:54:32+03:00 9 месяцев назад
1
Решение
65

Большинство разработчиков использовали библиотеку для создания MySQL-запроса из Java вместо того, чтобы пытаться писать команды во внешнюю программу и собирать выходные данные.


См. Например, http://dev.mysql.com/doc/refman/5.6/en/connector-j-usagenotes-statements.html#connector-j-examples-execute-select

ответил(а) 2021-01-19T19:54:32+03:00 9 месяцев назад
66

Runtime.exec не является оболочкой. Он запускает только один процесс и не обрабатывает перенаправление ввода и вывода, поэтому command1 | command2 command1 | command2 не будет работать.

В качестве обходного пути вы можете написать команду в файл.cmd и запустить ее с помощью cmd.exe.

ответил(а) 2021-01-19T19:54:32+03:00 9 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема