2012-11-17 8 views
17

मेरे पास एक MySQL डेटाबेस के लिए जावा प्रोग्राम कनेक्शन है, मैं एक ही कनेक्शन पर मौजूदा डेटाबेस को एक अलग तरीके से कैसे बदल सकता हूं?जावा, वर्तमान डेटाबेस को दूसरे में कैसे बदलें?

मैं इस तरह MySQL से कनेक्ट:

DriverManager.getConnection("jdbc:mysql://"+server+"/",log,pass); 

कुछ कार्यों मैं एक ही कनेक्शन पर एक अलग mysql डेटाबेस से कनेक्ट करना चाहते हैं के बाद। मैं उसे कैसे कर सकता हूँ?

मैं का उपयोग करने की कोशिश की:

Statement stat= con.createStatement(); 
ResultSet r=stat.executeQuery("use mysql"); 

लेकिन उस परिवर्तन नहीं करता है डेटाबेस प्रयोग की जाने वाली।

उत्तर

26

जैसा कि MySQL documentation में वर्णित है, आपको किसी अन्य डेटाबेस पर स्विच करने के लिए Connection.setCatalog() का उपयोग करने की आवश्यकता है। यह भी स्पष्ट रूप से कहता है कि आपको स्विच करने के लिए USE <databasename> निष्पादित करना चाहिए।

इस चेतावनी का कारण यह है कि जेडीबीसी डेटाबेस के लिए एक सामान्य इंटरफ़ेस है और catalogs (या databases स्विचिंग सहित) के साथ सामान्य कार्यों के लिए विधियां प्रदान करता है क्योंकि वे MySQL में हैं)। जेडीबीसी विनिर्देश/जावाडोक भी स्पष्ट रूप से कहता है कि लोगों को डेटाबेस विशिष्ट आदेशों पर एपीआई का उपयोग करना चाहिए (यदि दोनों उपलब्ध हैं)। इसके लिए कई कारण हैं: 1) यह डेटाबेस-स्वतंत्र कोड को बढ़ावा देता है, और 2) ड्राइवर एपीआई विधियों में से किसी एक के जवाब में आंतरिक रूप से अतिरिक्त चीजें कर सकता है। डेटाबेस विशिष्ट आदेशों का उपयोग करने से ड्राइवर को गलत व्यवहार करना पड़ सकता है क्योंकि इसकी आंतरिक स्थिति डेटाबेस स्थिति से मेल नहीं खाती है।

setCatalog(String) को एक कॉल मौजूदा बयान को प्रभावित नहीं करेगा, JDBC API दस्तावेज़ में निर्दिष्ट है:

कॉलिंग setCatalog कोई प्रभाव नहीं है पर पहले बनाया था या Statement वस्तुओं तैयार किया। यह क्रियान्वयन परिभाषित किया गया है कि Connection विधि prepareStatement या prepareCall लागू होने पर डीबीएमएस तैयार करने का कार्य तुरंत होता है या नहीं। अधिकतम पोर्टेबिलिटी के लिए, setCatalog को Statement से पहले बनाया या तैयार किया जाना चाहिए।

+0

आपको बहुत बहुत धन्यवाद :) – ognistysztorm

+0

यह जोड़ा जाना चाहिए कि बयान है कि 'Connection.setCatalog पहले बनाए गए थे() 'कहा गया था अभी भी पहले डेटाबेस तक पहुंच जाएगा। – Max

+0

@Max क्या आप जानते हैं कि अगर JDBC विनिर्देश में निर्दिष्ट किया जाता है या यह एक MySQL कार्यान्वयन विशिष्ट नियम है? मैं सामान्य रूप से Firebird के साथ काम करते हैं और के रूप में यह सूची नहीं है मैं आमतौर पर विवरण की इन प्रकार के ऊपर चमक;) –

4

आप इस तरह के अपने टेबल नामों पर डेटाबेस नाम उपसर्ग कर सकते हैं।

उदाहरण के लिए: db1 has table1 और db2 has table2

select * from db1.table1, db2.table2; 

यह आपको पार डेटाबेस करने की अनुमति देगा प्रश्नों

संबंधित मुद्दे