Vous transmettez toutes les informations de connexion sous la forme d'une valeur unique ; équivalent à ceci à partir d'une ligne de commande :
sqlplus "sys as sysdba/[email protected]<connect_string>"
qui obtiendrait la même réponse d'impression de l'aide à la connexion SQL*Plus. Vous avez également votre mot de passe au mauvais endroit, mais il ne va pas si loin. À partir d'une ligne de commande, cela fonctionnerait :
sqlplus "sys/tiger" "as" "[email protected]<connect_string>"
vous devez donc passer 5 arguments à ProcessBuilder
, quelque chose comme :
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);
Cela ne fonctionnera toujours que si votre environnement est configuré pour autoriser la connexion à distance en tant que sysdba
. Faire n'importe quoi en tant que sys
devrait être très rare, et avoir un script que vous souhaitez exécuter en tant que sys
semble assez inhabituel pour qu'un wrapper Java semble exagéré - et donne l'impression que vous pourriez vous connecter en tant que sys
régulièrement, ce qui n'est pas une bonne idée ; mais ce n'est peut-être qu'un exercice d'apprentissage.