आप सभी कनेक्शन जानकारी को एक मान के रूप में पास कर रहे हैं; कमांड लाइन से इसके बराबर:
sqlplus "sys as sysdba/tiger@<connect_string>"
जो SQL*Plus लॉगऑन सहायता को प्रिंट करने की समान प्रतिक्रिया प्राप्त करेगा। आपका पासवर्ड भी गलत जगह पर है लेकिन वह उतना दूर नहीं जा रहा है। कमांड लाइन से यह काम करेगा:
sqlplus "sys/tiger" "as" "sysdba@<connect_string>"
इसलिए आपको ProcessBuilder
में 5 तर्क देने होंगे , कुछ इस तरह:
String sqlCmd = "sqlplus";
String arg1 = "sys/tiger";
String arg2 = "as";
String arg3 = "sysdba@(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);
यह तब भी तभी काम करेगा जब आपका परिवेश sysdba
. के रूप में दूरस्थ कनेक्शन की अनुमति देने के लिए कॉन्फ़िगर किया गया हो . sys
. के रूप में कुछ भी करना बहुत दुर्लभ होना चाहिए, और एक स्क्रिप्ट होना चाहिए जिसे आप sys
. के रूप में चलाना चाहते हैं एक जावा रैपर के लिए ओवरकिल की तरह लगने के लिए काफी असामान्य लगता है - और ऐसा लगता है कि आप sys
के रूप में कनेक्ट हो सकते हैं नियमित रूप से, जो एक अच्छा विचार नहीं है - लेकिन शायद यह सिर्फ सीखने का अभ्यास है।