Sie übergeben alle Verbindungsinformationen als einen einzigen Wert; Äquivalent dazu von einer Befehlszeile:
sqlplus "sys as sysdba/example@sqldat.com<connect_string>"
was die gleiche Antwort erhalten würde wie das Drucken der SQL*Plus-Anmeldehilfe. Sie haben auch Ihr Passwort an der falschen Stelle, aber so weit kommt es nicht. Von einer Befehlszeile aus würde dies funktionieren:
sqlplus "sys/tiger" "as" "example@sqldat.com<connect_string>"
Sie müssen also 5 Argumente an ProcessBuilder übergeben , etwas wie:
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);
Dies funktioniert weiterhin nur, wenn Ihre Umgebung so konfiguriert ist, dass eine Remote-Verbindung als sysdba zugelassen wird . Alles als sys tun sollte sehr selten sein und ein Skript haben, das Sie als sys ausführen möchten ungewöhnlich genug erscheinen, dass ein Java-Wrapper wie ein Overkill wirkt - und es so aussehen lässt, als würden Sie sich als sys verbinden routinemäßig, was keine gute Idee ist - aber vielleicht ist dies nur eine Lernübung.