Anda meneruskan semua informasi koneksi sebagai nilai tunggal; setara dengan ini dari baris perintah:
sqlplus "sys as sysdba/[email protected]<connect_string>"
yang akan mendapatkan respons yang sama dengan mencetak bantuan masuk SQL*Plus. Anda juga memiliki kata sandi di tempat yang salah tetapi tidak sampai sejauh itu. Dari baris perintah ini akan berfungsi:
sqlplus "sys/tiger" "as" "[email protected]<connect_string>"
jadi Anda harus meneruskan 5 argumen ke ProcessBuilder
, sesuatu seperti:
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);
Ini hanya akan berfungsi jika lingkungan Anda dikonfigurasi untuk mengizinkan koneksi jarak jauh sebagai sysdba
. Melakukan apa saja sebagai sys
seharusnya sangat jarang, dan memiliki skrip yang ingin Anda jalankan sebagai sys
tampaknya cukup tidak biasa untuk pembungkus Java tampak seperti berlebihan - dan membuatnya tampak seperti Anda mungkin terhubung sebagai sys
secara rutin, itu bukan ide yang bagus - tapi mungkin ini hanya latihan pembelajaran.