Вие предавате цялата информация за връзката като една стойност; еквивалентно на това от командния ред:
sqlplus "sys as sysdba/example@sqldat.com<connect_string>"
което ще получи същия отговор за отпечатване на помощта за влизане в SQL*Plus. Освен това имате паролата си на грешното място, но не стигате толкова далеч. От командния ред това ще работи:
sqlplus "sys/tiger" "as" "example@sqldat.com<connect_string>"
така че трябва да подадете 5 аргумента към ProcessBuilder , нещо като:
String sqlCmd = "sqlplus";
String arg1 = "sys/tiger";
String arg2 = "as";
String arg3 = "example@sqldat.com(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 рутинно, което не е добра идея - но може би това е просто учебно упражнение.