Выполнить MySQL команд в Java ProcessBuilder на Windows - PullRequest
0 голосов
/ 08 мая 2020

Я пытаюсь выполнить несколько команд MySQL из Java ProcessBuilder на WINDOWS, и у меня возникли проблемы. На данный момент я хочу показать базы данных, но в ближайшем будущем я собираюсь использовать dump et c. Так и должно быть.

Вот мой код:

try {

//  Process process = Runtime.getRuntime().exec("cmd /c C:/\"Program files\"/MySQL/\"MySQL Server 8.0\"/bin/mysql -uroot -pMYPASS -e \"show databases;\""); 
//  IT DIDN'T WORK EITHER.

    ProcessBuilder coolBuilder = new ProcessBuilder(new String[]{"cmd", "/c", "C://\"Program files\"/MySQL/\"MySQL Server 8.0\"/bin/mysql -u root -pMYPASS -e \"show databases;\""});
    Process process = coolBuilder.start();

    int errCode = process.waitFor();
    if (errCode != 0) {
        System.out.println("errCode = " + errCode);
        errorList.add(ErrorEnum.ERROR_OCCURED_WHILE_INSIDE_SHELL.toString());
    }

    for (String s : output(process.getErrorStream())) {
        if (!s.contains("Warning")) {
            errorList.add(s);
            return errorList;
        }
    }

    return output(process.getInputStream());

} catch (Exception e) {
    e.printStackTrace();
}

Вот что я получаю:

C://Program files/MySQL/MySQL Server 8.0/bin/mysql  Ver 8.0.20 for Win64 on x86_64 (MySQL Community Server - GPL)
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Usage: C://Program files/MySQL/MySQL Server 8.0/bin/mysql [OPTIONS] [database]
  -?, --help          Display this help and exit.
  -I, --help          Synonym for -?
  --auto-rehash       Enable automatic rehashing. One doesn't need to use
                      'rehash' to get table and field completion, but startup



...

errCode = 1

Любые предложения, где я делаете это неправильно?

1 Ответ

1 голос
/ 08 мая 2020

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

Пытались ли вы выполнить исполняемый файл mysql напрямую, а не через cmd.exe, т.е. используя что-то вроде следующего?

        ProcessBuilder coolBuilder = new ProcessBuilder(new String[]{"C://Program files/MySQL/MySQL Server 8.0/bin/mysql", "-u", "root", "-pMYPASS", "-e", "show databases;"});
        Process process = coolBuilder.start();

Таким образом, вам не нужно заключать в кавычки все аргументы.

...