2014-04-11 3 views
9

पर नेटबीन में जावा एप्लिकेशन से मारियाडीबी से कनेक्ट करें, मैं एक साधारण जावा एप्लिकेशन के माध्यम से मारियाडब में डेटाबेस से कनेक्ट करने का प्रयास कर रहा हूं लेकिन कनेक्शन असफल होने के लिए कहा जाता है और एक अपवाद फेंक दिया जाता है। मैंने mysql का उपयोग करके समान कनेक्शन किया है और यह सही तरीके से काम कर रहा था। समस्या यहां ड्राइवर के साथ हो सकती है।लिनक्स (नेटिया)

try{ 
      Class.forName("org.mariadb.jdbc.Driver"); 

     Connection connection = DriverManager.getConnection( 
       "jdbc:mariadb://localhost:3306/project", "root", ""); 
     Statement statement = connection.createStatement(); 

     String uname="xyz",pass="abc"; 
     statement.executeUpdate("insert into user values('"+uname+"','"+pass+"')");}//end of try block 

मैं मदद के लिए इंटरनेट को देखा और है कि ड्राइवर जावा अनुप्रयोगों के लिए MariaDB क्लाइंट लाइब्रेरी द्वारा प्रदान की कक्षा से आया com.mysql.jdbc.Driver लेकिन org.mariadb.jdbc.Driver नहीं है! मैंने इसे तदनुसार बदल दिया लेकिन ऐसा लगता है कि समस्या ब्लॉक के अंदर पहली पंक्ति के साथ समस्या है। चालक बिल्कुल लोड नहीं हो रहा है। इसके अलावा, मैंने नीचे दिए गए स्क्रीन-शॉट में अपने जावा एप्लिकेशन के पुस्तकालयों में mysql jar फ़ाइल जोड़ दी है। कृपया इसके माध्यम से मेरी मदद करें। enter image description here

उत्तर

14

ऐसा प्रतीत होता है कि आप MySQL जेडीबीसी चालक का उपयोग कर मारियाडीबी सर्वर उदाहरण से कनेक्शन स्थापित करने के लिए jdbc:mariadb://... का उपयोग करने का प्रयास कर रहे हैं। शायद यह काम नहीं करेगा क्योंकि MySQL जेडीबीसी चालक jdbc:mysql://... का उपयोग करेगा, भले ही यह किसी MySQL सर्वर या मारियाडीबी सर्वर से कनेक्ट हो रहा हो। यही है, कनेक्शन स्ट्रिंग को ड्राइवर से मेल खाना चाहिए जिसका उपयोग किया जा रहा है (डेटाबेस सर्वर तक पहुंचने के बजाए)।

MySQL और MariaDB ड्राइवरों को कुछ हद तक अदला-बदली माना जाता है, लेकिन मारियाडीबी सर्वर तक पहुंचने पर मारियाडीबी कनेक्टर का उपयोग करना केवल बुद्धिमान लगता है। क्या यह mariadb-java-client-1.1.7.jar

projectProperties.png

और

Connection con = DriverManager.getConnection(
     "jdbc:mariadb://localhost/project", 
     "root", 
     "whatever"); 

मेरे लिए काम किया के संयोजन के लायक है, के लिए। मैं यहाँ से जावा के लिए MariaDB क्लाइंट लाइब्रेरी डाउनलोड किया गया:

https://downloads.mariadb.org/client-java/1.1.7/

जो मैं के माध्यम से

https://downloads.mariadb.org/

अतिरिक्त नोट्स पर पहुंचे:

  1. एक के लिए कोई जरूरत नहीं है आपके जावा कोड में Class.forName() कथन।

  2. मारिया के तहत मारिया डीबी के लिए डिफ़ॉल्ट कॉन्फ़िगरेशन में skip-networking निर्देश /etc/my.cnf में निर्देश शामिल हो सकता है। यदि आप जेडीबीसी के माध्यम से डेटाबेस से कनेक्ट करना चाहते हैं तो आपको उस निर्देश को हटाने (या टिप्पणी करने) की आवश्यकता होगी क्योंकि जेडीबीसी कनेक्शन हमेशा MySQL/MariaDB से "नेटवर्क" कनेक्शन की तरह दिखते हैं, भले ही वे localhost से कनेक्शन हों। (आपको 0.0.0.0 की तरह कुछ करने के लिए bind-address मूल्य tweak करना पड़ सकता है।)

+0

परिवर्तन क्या और फिर पुनरारंभ करने के बाद ही, चीजें काम करती थीं। /etc/my.cnf फ़ाइल में स्किप-नेटवर्किंग निर्देश को केवल टिप्पणी करने के लिए परियोजना गुणों में लाइब्रेरी जोड़ने के साथ काम किया। –

+0

लेकिन जब जावा वेब अनुप्रयोग के साथ समस्या बनी रहती है। वहां यह दिखाता है कि चालक गुम है। –

+0

@ नीतीशप्रीक एक त्वरित खोज ने कई उत्तरों जैसे [यह एक] (http://stackoverflow.com/a/2862260/2144390) प्रकट किया। क्या उससे मदद हुई? –

10

एक अतिरिक्त ध्यान दें: MariaDB JDBC ड्राइवर तलाश, मैं यूआरएल को पार्स फाइल के अंदर यह पाया:

Project: https://github.com/MariaDB/mariadb-connector-j.git 
File: src/main/java/org/mariadb/jdbc/UrlParser.java 

public static UrlParser parse(final String url, Properties prop) throws SQLException { 
.... 
     if (url.startsWith("jdbc:mysql:")) { 
      UrlParser urlParser = new UrlParser(); 
      parseInternal(urlParser, url, prop); 
      return urlParser; 
     } else { 
      if (url.startsWith("jdbc:mariadb:")) { 
       UrlParser urlParser = new UrlParser(); 
       parseInternal(urlParser, "jdbc:mysql:" + url.substring(13), prop); 
       return urlParser; 
      } 
     }  

जैसा कि आप देख सकते हैं, स्ट्रिंग "jdbc:mariadb:" हमेशा आंतरिक रूप से "jdbc:mysql:" के साथ प्रतिस्थापित की जाती है।तो जब मारियाडीबी चालक की बात आती है, चाहे वह है: मारियाडब: या: mysql: इसे हमेशा "jdbc:mysql:" के रूप में पार्स किया जाता है।

कोई फर्क नहीं पड़ता।

if (url.startsWith("jdbc:mariadb:")) { 
    .... 
    parseInternal(urlParser, "jdbc:mysql:" + url.substring(13), prop); 
    .... 
+0

ग्रेट टिप! धन्यवाद। – Marco

+0

कि MySQL और mariadb दोनों कनेक्शनिंग स्ट्रिंग के लिए मान्य हैं, मारियाडीबी ड्राइवर प्रलेखन में 'jdbc: (mysql | mariadb) के रूप में भी कहा गया है: [प्रतिकृति: | विफलता: | अनुक्रमिक: | aurora:] // [, ...]/[डेटाबेस] [? = [& = ]] 'यह भी देखें https://mariadb.com/kb/en/mariadb/about-mariadb-connector-j/#connection-strings – kap