Sie übergeben alle Verbindungsinformationen als einen einzigen Wert; Äquivalent dazu von einer Befehlszeile:
sqlplus "sys as sysdba/[email protected]<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" "[email protected]<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 = "[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);
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.