2014-07-01 10 views
5

मैं आज लगभग 3 घंटे के लिए इसका शोध कर रहा हूं, और मुझे लगता है कि मैं करीब हूं, लेकिन मेरे पास कुछ प्रश्न हैं। अब तक मिली जानकारी के लिए सबसे अच्छा स्रोत यहां है: https://stackoverflow.com/a/2840358, लेकिन यह मेरे सभी सवालों का जवाब नहीं देता है।मैं जेडीबीसी डेटाबेस यूआरएल कैसे उत्पन्न करूं?

एक छोटी सी पृष्ठभूमि: मैं माइक्रोसॉफ्ट एसक्यूएल सर्वर 2014 का उपयोग कर रहा हूं और मैंने सत्यापित किया है कि आईपी पता, 127.0.0.1, पोर्ट 1433 के साथ सक्रिय और सक्षम है। मुझे SQL सर्वर प्रोग्राम के माध्यम से डेटाबेस से कनेक्ट करने में कोई समस्या नहीं है उसी मशीन पर, लेकिन मैं एक जावा प्रोग्राम से कनेक्ट करने की कोशिश कर रहा हूं जिसे मैं लिख रहा हूं, और वर्तमान में यह त्रुटि दे रहा है: com.microsoft.sqlserver.jdbc.SQLServerException: पोर्ट नंबर 1433/R2M_Database मान्य नहीं है। मैं इससे उलझन में हूं क्योंकि मुझे पता है कि पोर्ट 1433 सही है, और मुझे पता है कि जिस डेटाबेस से मैं कनेक्ट करना चाहता हूं उसे R2M_Database कहा जाता है। अब, मेरे स्रोत कोड के साथ मेरे प्रश्न यहां दिए गए हैं।

1.) "mysql" और "sqlserver" subprotocols के बीच क्या अंतर है, और मुझे कैसे पता चलेगा कि किस का उपयोग करना है? (मुझे पूरा यकीन है कि मुझे एसक्लसेवर का उपयोग करना चाहिए, लेकिन बस मामले में)

2.) मैं कैसे सुनिश्चित करूं कि मैं सही होस्टनाम का उपयोग कर रहा हूं? (मुझे यकीन है कि 127.0.0.1/लोकलहोस्ट वह है जिसे मैं उपयोग करना चाहता हूं, लेकिन मैं इस प्रोग्राम को अन्य मशीनों से डेटाबेस तक पहुंचने में कैसे सक्षम करूं?)

3.) क्या कोई है बाहरी समस्याएं जो इसे फ़ायरवॉल या पासवर्ड आवश्यकताओं के कारण उत्पन्न कर सकती हैं?

import java.sql.DriverManager; 
import java.io.BufferedReader; 
import java.io.FileReader; 
import org.apache.ibatis.jdbc.ScriptRunner; 

public class SQLTest { 
    public static void main(String[] args){ 
     String script = "CreatePersons.sql"; 
     try { 
      Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 
      new ScriptRunner(DriverManager.getConnection("jdbc:sqlserver://127.0.0.1:1433;databaseName=R2M_Database", userName, password)) 
        .runScript(new BufferedReader(new FileReader(script))); 
     } catch (Exception e) { 
      System.err.println(e); 
     } 
    } 
} 

मैं एक मामूली वाक्य रचना परिवर्तन किया:

संपादित करें (मैं काफी हद तक निश्चित है कि उपयोगकर्ता नाम और पासवर्ड सही रूप में वे लोगों को मैं सफलतापूर्वक Microsoft SQL सर्वर में एक कनेक्शन 2014 प्राप्त करने के लिए का उपयोग कर रहे हैं रहा हूँ) (; डेटाबेस नाम = इसके बजाए), और अब मुझे यह त्रुटि मिल रही है:

com.microsoft.sqlserver.jdbc.SQLServerException: उपयोगकर्ता 'RSquaredMacro' के लिए लॉगिन विफल रहा। ClientConnectionId: 35281a40-0f87-42e4-bc46-b9a81a371529

+0

आप मुसीबत को जोड़ने कर रहे हैं, सबसे अधिक संभावना समस्या यह है कि आप अभी तक टीसीपी से सक्षम नहीं किया है/पोर्ट 1433 पर आईपी श्रोता। एक त्वरित "netstat -an" कमांड आपको बताएगा कि क्या यह सुन रहा है। जांचें और टिप्पणी करें कि आपको क्या मिला ??? –

+0

यह तब हुआ जब मैंने "netstat -an" किया था: [लॉग की छवि] (http://i.imgur.com/vjh2LZO) – user1654889

+0

आपके आंकड़े के अनुसार, पोर्ट नंबर। 1433 सुन रहा है। तो, यह बिल्कुल कोई समस्या नहीं है! –

उत्तर

3
  1. mysql एक पूरी तरह से अलग डेटाबेस सर्वर है। SQL सर्वर के लिए इसका उपयोग न करें।

  2. आपको अपने डेटाबेस सर्वर के लिए एक सार्वजनिक पता प्रदान करने की आवश्यकता होगी। या तो एक आईपी या होस्टनाम ठीक है, जब तक कि आपके सभी ग्राहक इसे देख सकें। यदि आपके पास कोई नहीं है, तो आप dyndns.org या ऐसा कुछ उपयोग करने का प्रयास कर सकते हैं। ध्यान दें कि आपके क्लाइंट को अभी भी नेटवर्क पर आपके सर्वर पर पहुंचने में सक्षम होना चाहिए (संभावित फ़ायरवॉल मुद्दे)। अपनी स्थिति के बारे में और जानने के बिना और अधिक कहना मुश्किल है।

  3. फ़ायरवॉल संभवतः एक मुद्दा हो सकता है लेकिन यह स्थानीयहोस्ट के लिए असंभव है। मुझे लगता है कि समस्या टीसीपी/आईपी श्रोता, उपयोगकर्ता नाम, पासवर्ड, या डेटाबेस नाम सेटिंग्स के साथ है।

    1. आप 1433 पोर्ट संख्या शामिल करने की ज़रूरत नहीं है: http://technet.microsoft.com/en-us/library/ms378428%28v=sql.110%29.aspx

      इसके अलावा कुछ ओर नोट:

    यहाँ एक JDBC कनेक्शन स्ट्रिंग निर्माण के बारे में अधिक जानकारी के साथ एक कड़ी है।

  4. पूरे स्टैक ट्रेस को प्रिंट करने से आपको डिबगिंग में मदद मिलेगी। (नीचे कोड देखें)

  5. आपको अपने कनेक्शन के लिए एक चर घोषित करना चाहिए और यह सुनिश्चित करना चाहिए कि यह बंद हो जाता है। उदाहरण:

    Connection c = null; 
    try { 
        Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 
        c = DriverManager.getConnection("jdbc:sqlserver://127.0.0.1:1433/R2M_Database", userName, password); 
        new ScriptRunner(c).runScript(new BufferedReader(new FileReader(script))); 
    } catch (Exception e) { 
        e.printStackTrace(); 
    } finally { 
        if (c != null) try { c.close(); } catch (Exception e) { } 
    } 
    
+0

सहायता के लिए धन्यवाद, मैं dyndns.org में देखूंगा। जिस पोर्ट को मैं ढूंढ रहा हूं वह नेटस्टैट-कमांड के आधार पर सुन रहा है जो मैंने भाग लिया था। मैंने कुछ और दस्तावेज देखे और मैंने एक संपादन किया जो आपका पासवर्ड/उपयोगकर्ता नाम सिद्धांत संभवतः प्रतीत होता है, लेकिन मैंने आज इस पासवर्ड और उपयोगकर्ता नाम का सफलतापूर्वक उपयोग किया है। – user1654889

+0

क्या पासवर्ड में विशेष वर्ण (विशेष रूप से बैकस्लैश) हैं? मूल्य की पुष्टि करने के लिए 'System.err.println (" passwd = "+ password) 'करने का प्रयास करें। – Barett

+0

पासवर्ड सही ढंग से मुद्रित किया गया। यह संख्याओं और अक्षरों की एक स्ट्रिंग है जिसमें कोई विशेष वर्ण नहीं है। – user1654889

0

ऐसा लगता है कि इस मुद्दे को मेरी JDBC URL का प्रारूप में सभी था।

"jdbc:sqlserver://" + serverName + ";database=" + databaseName 

1.) Servername: ढूंढने के लिए समस्या मैं था कि विभिन्न subprotocols उनके URL- रों के लिए अलग वाक्यविन्यास है, लेकिन sqlserver प्रोटोकॉल (और कैसे प्रत्येक भाग को खोजने के लिए) के लिए वाक्य रचना नीचे सूचीबद्ध है था आपके सर्वर का नाम, माइक्रोसॉफ्ट एसक्यूएल सर्वर से कनेक्ट करें (ये निर्देश SQL सर्वर 2014 पर आधारित हैं), और दाएं "गुण" फलक को देखें। शीर्ष पर कॉम्बो बॉक्स में "वर्तमान कनेक्शन पैरामीटर" चुनें, और "सर्वर नाम" फ़ील्ड के लिए "कनेक्शन विवरण" के अंतर्गत देखें।

2.) डेटाबेस नाम: यह एक काफी सरल है, क्योंकि यह डेटाबेस का नाम है जिसे आप डेटा तक पहुंचना चाहते हैं। भले ही आप जिस उपयोगकर्ता को लॉग इन करते हैं उसे "मास्टर" डेटाबेस के अंतर्गत सूचीबद्ध किया गया है, आपको "मास्टर" में लॉग इन करने की आवश्यकता नहीं है, बल्कि, आप जिस भी डेटाबेस को चाहते हैं उसका उपयोग कर सकते हैं, जब तक कि आप जिस उपयोगकर्ता को लॉग इन कर रहे हैं उसे अनुमति है उन कार्यों को करने के लिए जिन्हें आप पूरा करना चाहते हैं।

अंत: यहाँ लिंक है कि मुझे अंत में मेरी समस्या का समाधान में मदद की है, जो और अधिक विस्तार में चला जाता है: http://www.programcreek.com/2010/05/java-code-for-connecting-ms-sql-server-by-using-sql-server-authentication/

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