Všechny informace o připojení předáváte jako jedinou hodnotu; ekvivalentní tomuto z příkazového řádku:
sqlplus "sys as sysdba/[email protected]<connect_string>"
což by získalo stejnou odezvu při tisku nápovědy k přihlášení SQL*Plus. Máte také heslo na špatném místě, ale tak daleko to nejde. Z příkazového řádku by to fungovalo:
sqlplus "sys/tiger" "as" "[email protected]<connect_string>"
takže musíte předat 5 argumentů do ProcessBuilder
, něco jako:
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);
Toto bude stále fungovat, pouze pokud je vaše prostředí nakonfigurováno tak, aby umožňovalo vzdálené připojení jako sysdba
. Dělat cokoliv jako sys
by měl být velmi vzácný a mít skript, který chcete spustit jako sys
zdá se dost neobvyklé na to, aby Java wrapper vypadal přehnaně – a vypadá to, jako byste se mohli připojit jako sys
rutinně, což není dobrý nápad – ale možná je to jen cvičení.