Stai passando tutte le informazioni di connessione come un unico valore; equivalente a questo da una riga di comando:
sqlplus "sys as sysdba/[email protected]<connect_string>"
che otterrebbe la stessa risposta della stampa della guida di accesso di SQL*Plus. Hai anche la tua password nel posto sbagliato ma non va così lontano. Da una riga di comando funzionerebbe:
sqlplus "sys/tiger" "as" "[email protected]<connect_string>"
quindi devi passare 5 argomenti a ProcessBuilder
, qualcosa come:
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);
Funzionerà comunque solo se il tuo ambiente è configurato per consentire la connessione remota come sysdba
. Fare qualsiasi cosa come sys
dovrebbe essere molto raro e avere uno script che vuoi eseguire come sys
sembra abbastanza insolito da far sembrare un wrapper Java eccessivo - e fa sembrare che potresti connetterti come sys
di routine, il che non è una buona idea, ma forse questo è solo un esercizio di apprendimento.