Przekazujesz wszystkie informacje o połączeniu jako pojedynczą wartość; odpowiednik tego z wiersza poleceń:
sqlplus "sys as sysdba/[email protected]<connect_string>"
które otrzymałyby taką samą odpowiedź, jak drukowanie pomocy logowania SQL*Plus. Masz też swoje hasło w złym miejscu, ale to nie zajdzie tak daleko. Z wiersza poleceń działałoby to:
sqlplus "sys/tiger" "as" "[email protected]<connect_string>"
więc musisz przekazać 5 argumentów do ProcessBuilder
, coś takiego:
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);
Będzie to nadal działać tylko wtedy, gdy twoje środowisko jest skonfigurowane tak, aby zezwalać na zdalne połączenie jako sysdba
. Robienie czegokolwiek jako sys
powinno być bardzo rzadkie i mieć skrypt, który chcesz uruchomić jako sys
wydają się na tyle niezwykłe, że opakowanie Java może wydawać się przesadą - i sprawia wrażenie, że możesz połączyć się jako sys
rutynowo, co nie jest dobrym pomysłem - ale może to tylko ćwiczenie edukacyjne.