Du skickar all anslutningsinformation som ett enda värde; motsvarande detta från en kommandorad:
sqlplus "sys as sysdba/[email protected]<connect_string>"
som skulle få samma svar som att skriva ut SQL*Plus-inloggningshjälpen. Du har också ditt lösenord på fel ställe men det kommer inte så långt. Från en kommandorad skulle detta fungera:
sqlplus "sys/tiger" "as" "[email protected]<connect_string>"
så du måste skicka 5 argument till ProcessBuilder
, något i stil med:
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);
Detta fungerar fortfarande bara om din miljö är konfigurerad att tillåta fjärranslutning som sysdba
. Gör vad som helst som sys
bör vara mycket sällsynt och ha ett skript som du vill köra som sys
verkar ovanligt nog för att ett Java-omslag ska verka som överdrivet - och får det att verka som att du kan ansluta som sys
rutinmässigt, vilket inte är en bra idé - men det här är kanske bara en inlärningsövning.