Вие предавате цялата информация за връзката като една стойност; еквивалентно на това от командния ред:
sqlplus "sys as sysdba/[email protected]<connect_string>"
което ще получи същия отговор за отпечатване на помощта за влизане в SQL*Plus. Освен това имате паролата си на грешното място, но не стигате толкова далеч. От командния ред това ще работи:
sqlplus "sys/tiger" "as" "[email protected]<connect_string>"
така че трябва да подадете 5 аргумента към ProcessBuilder
, нещо като:
String sqlCmd = "sqlplus";
String arg1 = "sys/tiger";
String arg2 = "as";
String arg3 = "[email protected](DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=hostname)(Port=PORT ID))(CONNECT_DATA=(SID=SID)))";
String arg4 = fileName;
...
ProcessBuilder pb = new ProcessBuilder(sqlCmd, arg1, arg2, arg3, arg4);
Това все още ще работи само ако вашата среда е конфигурирана да позволява отдалечена връзка като sysdba
. Правене на нещо като sys
трябва да е много рядко и да имате скрипт, който искате да стартирате като sys
изглежда достатъчно необичайно, за да изглежда обвивката на Java като излишък - и изглежда, че може да се свържете като sys
рутинно, което не е добра идея - но може би това е просто учебно упражнение.