почему Runtime.getRuntime (). exe c (запуск Oracle); не полностью выполняет команду - PullRequest
0 голосов
/ 16 февраля 2020

Я новичок в java и у меня возникают проблемы при попытке запуска oracle с кодом java. Я прочитал несколько тем на эту тему, но ни одна из них не сработала для меня. Вот мой код:

try {
            Class.forName("oracle.jdbc.driver.OracleDriver");
            String host = "jdbc:oracle:thin:@localhost:1521:orcl";
            String uName = "username";
            String uPass = "password";

            con = DriverManager.getConnection(host, uName, uPass); 

    }catch (Exception err){

        }
        if (con == null){
       String[] startupOracle = new String[]{"cmd ", " /c start cmd /K " + "\"" + " chcp 1251 "
         + " &C:\\app\\Raph\\product\\12.1.0\\dbhome_1\\bin\\sqlplus.exe " + "username/password" 
            + "&startup" };

       Process pr = Runtime.getRuntime().exec(startupOracle); 
        }

У меня есть две проблемы:

  1. Runtime.getRuntime().exec(startupOracle); выполняется до момента входа в систему и останавливает выполнение сразу после того, как я ' m вошел в систему, тем самым оставив строку 15 («& startup») не выполненной.

  2. Я не могу подключиться к oracle, используя "CONNECT / AS SYSDBA" в качестве моего имени пользователя. Я предполагаю, что это связано с пустым пространством и символом "/" в имени пользователя, потому что, когда я использую «system» в качестве имени пользователя, я подключаюсь. Я не знаю, как решить проблему пустого пространства и "/" в прежнем имени пользователя.

1 Ответ

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

Javado c из exec(String[] cmdarray) говорит:

Параметры:
cmdarray - массив, содержащий команду для вызова и его аргументы.

Его «аргументы» (множественное число) , что означает, что если вы хотите выполнить команду foo.exe bar abc, то вам нужно передать { "foo.exe", "bar", "abc" }, а не { "foo.exe", "bar abc" }.

Для вашего кода это означает:

String[] startupOracle = new String[] {
        "cmd",
        "/c",
        "start",
        "cmd",
        "/K",
        "\"chcp 1251" +
          " & " +
          "C:\\app\\Raph\\product\\12.1.0\\dbhome_1\\bin\\sqlplus.exe username/password &startup\""
};

Или что-то в этом роде, хотя я думаю, что у вас есть некоторые проблемы с &.

...