मैं जावा की Runtime.exec विधि का उपयोग कर कुछ एसक्यूएल स्क्रिप्ट निष्पादित करना चाहता हूं। मैं mysql.exe/mysql.sh का आह्वान करना चाहता हूं और स्क्रिप्ट फ़ाइल को इस प्रक्रिया में रीडायरेक्ट करना चाहता हूं। कमांड प्रॉम्प्ट से मैं आदेशstdin को java Runtime.exec पर रीडायरेक्ट कैसे करें?
<mysqInstallDir\/bin\mysql.exe -u <userName> -p <password> < scripts\create_tables.sql
मैं Runtime.exec का उपयोग कर mysql.exe आह्वान कर सकते हैं चला सकते हैं लेकिन मैं कैसे एसक्यूएल फ़ाइल से डेटा अनुप्रेषित करते mysql.exe के लिए?
मैं http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html?page=4 में लेख पढ़ सकते हैं और StreamGobbler तंत्र का इस्तेमाल किया त्रुटि और आउटपुट स्ट्रीम प्राप्त करने के लिए। वहां कोई समस्या नहीं है। समस्या BufferedReader का उपयोग करके फ़ाइल को "स्क्रिप्ट \ create_tables.sql" पढ़ने और prcess के outputstream में सामग्री को पास करने में आता है। मैं प्रक्रिया को mysql.exe पर डेटा पास करने की अपेक्षा कर रहा था। लेकिन मुझे लगता है कि इस एसक्यूएल फ़ाइल से केवल पहली पंक्ति पढ़ी जाती है।
OutputStream outputstream = proc.getOutputStream();
OutputStreamWriter outputstreamwriter = new OutputStreamWriter(outputstream);
BufferedWriter bufferedwriter = new BufferedWriter(outputstreamwriter);
while ((line = br.readLine()) != null)
{
bufferedwriter.write(line);
bufferedwriter.flush();
System.out.println(line);
}
bufferedwriter.flush();
bufferedwriter.close();
proc.waitFor()
जब मैं ऐसा करता हूं तो मुझे लगता है कि create_tables.sql में केवल पहली पंक्ति निष्पादित की गई है। प्रक्रिया के लिए निकास कोड 0 है और कोई अन्य त्रुटि या आउटपुट नहीं है।
का उपयोग कर और त्रुटि धारा, निश्चित रूप से कहते हैं। या प्रोसेसबिल्डर के रीडायरेक्ट एररस्ट्रीम (बूलियन) विधि के साथ आउटपुट और त्रुटि स्ट्रीम मर्ज करें, और मर्ज किए गए स्ट्रीम पढ़ें। –