2009-12-07 3 views
46

मेरा एसक्यूएल सर्वर इंस्टेंस नाम MYPC \ SQLEXPRESS है और मैं डेटाबेस 'ब्लॉग' से कनेक्ट करने के लिए एक जेटीडीएस कनेक्शन स्ट्रिंग बनाने की कोशिश कर रहा हूं। क्या कोई मुझे पूरा करने में मदद कर सकता है?मुझे जेटीडीएस कनेक्शन स्ट्रिंग बनाने में मदद करें

मैं इस तरह करने के लिए कोशिश कर रहा हूँ:

DriverManager.getConnection("jdbc:jtds:sqlserver://127.0.0.1:1433/Blog", "user", "password"); 

और मैं इस मिल:

java.sql.SQLException: Network error IOException: Connection refused: connect 
    at net.sourceforge.jtds.jdbc.ConnectionJDBC2.<init>(ConnectionJDBC2.java:395) 
    at net.sourceforge.jtds.jdbc.ConnectionJDBC3.<init>(ConnectionJDBC3.java:50) 
    at net.sourceforge.jtds.jdbc.Driver.connect(Driver.java:184) 
    at java.sql.DriverManager.getConnection(Unknown Source) 
    at java.sql.DriverManager.getConnection(Unknown Source) 
    at SqlConnection.Connect(SqlConnection.java:19) 
    at main.main(main.java:11) 
Caused by: java.net.ConnectException: Connection refused: connect 
    at java.net.PlainSocketImpl.socketConnect(Native Method) 
    at java.net.PlainSocketImpl.doConnect(Unknown Source) 
    at java.net.PlainSocketImpl.connectToAddress(Unknown Source) 
    at java.net.PlainSocketImpl.connect(Unknown Source) 
    at java.net.SocksSocketImpl.connect(Unknown Source) 
    at java.net.Socket.connect(Unknown Source) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at net.sourceforge.jtds.jdbc.SharedSocket.createSocketForJDBC3(SharedSocket.java:305) 
    at net.sourceforge.jtds.jdbc.SharedSocket.<init>(SharedSocket.java:255) 
    at net.sourceforge.jtds.jdbc.ConnectionJDBC2.<init>(ConnectionJDBC2.java:323) 
    ... 6 more 

उत्तर

105

jTDS Frequenlty Asked Questions में विस्तृत रूप के संदर्भ में जोड़ने के लिए, jTDS के लिए URL स्वरूप है:

jdbc:jtds:<server_type>://<server>[:<port>][/<database>][;<property>=<value>[;...]] 

तो, एक डेटाबेस "ब्लॉग" नामक एक एमएस एसक्यूएल सर्वर पर चल रहा द्वारा की मेजबानी करने के लिए कनेक्ट करने के लिए MYPC, तो आप कुछ इस तरह से खत्म हो सकता है:

jdbc:jtds:sqlserver://MYPC:1433/Blog;instance=SQLEXPRESS;user=sa;password=s3cr3t 

या, आप का उपयोग करना पसंद करता है, तो getConnection(url, "sa", "s3cr3t"):

jdbc:jtds:sqlserver://MYPC:1433/Blog;instance=SQLEXPRESS 

संपादित करें: अपने Connection refused त्रुटि, दोहरी जांच आप पोर्ट 1433 पर एसक्यूएल सर्वर चला रहे हैं, कि सेवा चल रही है और आप एक फ़ायरवॉल इनकमिंग कनेक्शन अवरुद्ध नहीं है के बारे में

+3

है एसक्यूएल सर्वर कॉन्फ़िगरेशन मैनेजर – Omu

+1

में एसक्यूएलएक्सएक्सप्रेस के लिए प्रोटोकॉल में कुछ टीसीपी, के माध्यम से, कुछ टीसीपी सक्षम करने के बाद, धन्यवाद मैट, एसक्यूएल सर्वर 2000 –

+0

का उपयोग करके मेरे लिए पहला काम किया गया डेटा स्रोतों के लिए 'इंस्टेंस' संपत्ति जोड़ें और 'डेटाबेस नाम' में उदाहरण जोड़ें। – jan

5

jdbc:jtds:sqlserver://x.x.x.x/database आईपी या अपने एसक्यूएल सर्वर मशीन के होस्ट नाम के साथ x.x.x.x की जगह।

jdbc:jtds:sqlserver://MYPC/Blog;instance=SQLEXPRESS

या

jdbc:jtds:sqlserver://MYPC:1433/Blog;instance=SQLEXPRESS

आप के खिलाफ भी की बजाय अलग से एक कनेक्शन वस्तु यूज़रनेम और पासवर्ड कनेक्शन स्ट्रिंग में सेट करना चाहते हैं, तब:

jdbc:jtds:sqlserver://MYPC/Blog;instance=SQLEXPRESS;user=foo;password=bar

(मेरी गलत जानकारी अपडेट की गई और instance syntax)

+0

आप डीबी नाम कहां निर्दिष्ट करते हैं? – Omu

+0

मैंने कोशिश की, लेकिन मुझे एक त्रुटि मिली, मैंने इसे – Omu

+0

पर पोस्ट किया जैसा प्रैटिक और पास्कल ने उल्लेख किया है, आपको यह सत्यापित करना चाहिए कि सर्वर पोर्ट 1433 पर चल रहा है। –

2

अंधेरे में एक शॉट है, लेकिन अपने त्रुटि संदेश के दिखता से, यह, कि या तो sqlserver उदाहरण पोर्ट 1433 पर वास्तव में नहीं चल रहा है या कुछ है कि बंदरगाह

33

करने के लिए अनुरोध ब्लॉक कर रहा है वास्तव में, लगता है वास्तव में जांचें कि आपके स्थानीय SQLEXPRESS उदाहरण में टीसीपी/आईपी प्रोटोकॉल सक्षम है या नहीं।

बनाने के लिए इन चरणों का पालन सुनिश्चित करें:

  • खोलें "Sql सर्वर कॉन्फ़िगरेशन मैनेजर" "प्रारंभ मेनू \ कार्यक्रम \ Microsoft SQL सर्वर 2012 \ विन्यास उपकरण \"
  • विस्तृत "एसक्यूएल सर्वर नेटवर्क में विन्यास SQLEXPRESS के लिए प्रोटोकॉल "
  • " में
  • गो "टीसीपी/आईपी सक्षम

यदि आपको कोई समस्या है, तो विवरण के लिए this blog post देखें, क्योंकि इसमें स्क्रीनशॉट और बहुत अधिक जानकारी है।

यह भी जांच करता है, तो "एसक्यूएल सर्वर ब्राउज़र" खिड़कियों सेवा सक्रिय है और चल:

  • नियंत्रण कक्ष पर जाएं -> व्यवस्थापकीय उपकरण -> सेवाएं
  • खोलें "एसक्यूएल सर्वर ब्राउज़र" सेवा और इसे सक्षम करें (इसे मैन्युअल या स्वचालित बनाएं, आपकी ज़रूरतों पर निर्भर करता है)
  • इसे प्रारंभ करें।

यही है।

एक नया स्थानीय SQLExpress स्थापित करने के बाद, मुझे बस इतना करना था कि टीसीपी/आईपी सक्षम करें और SQL सर्वर ब्राउज़र सेवा शुरू करें।

एक कोड के नीचे मैं SQLEXPRESS स्थानीय कनेक्शन का परीक्षण करने के लिए उपयोग करता हूं। बेशक, आप आईपी, DatabaseName और उपयोगकर्ता/पासवर्ड बदलना चाहिए की जरूरत के रूप में .:

import java.sql.Connection; 
import java.sql.DatabaseMetaData; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.SQLException; 

public class JtdsSqlExpressInstanceConnect { 
    public static void main(String[] args) throws SQLException { 
     Connection conn = null; 
     ResultSet rs = null; 
     String url = "jdbc:jtds:sqlserver://127.0.0.1;instance=SQLEXPRESS;DatabaseName=master"; 
     String driver = "net.sourceforge.jtds.jdbc.Driver"; 
     String userName = "user"; 
     String password = "password"; 
     try { 
      Class.forName(driver); 
      conn = DriverManager.getConnection(url, userName, password); 
      System.out.println("Connected to the database!!! Getting table list..."); 
      DatabaseMetaData dbm = conn.getMetaData(); 
      rs = dbm.getTables(null, null, "%", new String[] { "TABLE" }); 
      while (rs.next()) { System.out.println(rs.getString("TABLE_NAME")); } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } finally { 
      conn.close(); 
      rs.close(); 
     } 
    } 
} 

और अगर आप Maven का उपयोग करें, अपने pom.xml से जोड़ें:

<dependency> 
    <groupId>net.sourceforge.jtds</groupId> 
    <artifactId>jtds</artifactId> 
    <version>1.2.4</version> 
</dependency> 
+1

और सुनिश्चित करें कि आप स्टेटिक पोर्ट = 1433 का उपयोग कर रहे हैं - आपके 'आईपी ऑल' सेटिंग्स के तहत गतिशील पोर्ट नहीं। –

+0

आप वास्तव में अच्छे आदमी हैं! –

-2

SQLServer डिफ़ॉल्ट चलाता है पोर्ट 1433 पर उदाहरण। यदि आप बंदरगाह 1433 के रूप में पोर्ट निर्दिष्ट करते हैं, तो SQLServer केवल डिफ़ॉल्ट उदाहरण की तलाश करेगा। डिफ़ॉल्ट उदाहरण का नाम सेटअप पर बनाया गया था और आमतौर पर SQLEXPRESSxxx_xx_ENU है।

उदाहरण नाम प्रोग्राम फ़ाइलों -> माइक्रोसॉफ्ट एसक्यूएल सर्वर में बनाए गए फ़ोल्डर नाम से भी मेल खाता है। तो यदि आप वहां देखते हैं और SQLEXPRESSxxx_xx_ENU नामक एक फ़ोल्डर देखते हैं तो यह डिफ़ॉल्ट उदाहरण है।

फ़ोल्डर एसक्यूएल सर्वर में MSSQL12.myInstanceName (SQLServer 2012 के लिए) नाम दिया गया है उदाहरणों नामित और पोर्ट 1433

इसलिए यदि आपके प्रोग्राम डेटाबेस में एक डिफ़ॉल्ट उदाहरण तक पहुँच रहा है, यह निर्दिष्ट द्वारा ही पहुंचा नहीं कर रहे हैं पोर्ट 1433, और आपको इंस्टेंस नाम निर्दिष्ट करने की आवश्यकता नहीं हो सकती है।

यदि आपका प्रोग्राम डेटाबेस डेटाबेस में नामित उदाहरण (डिफ़ॉल्ट उदाहरण नहीं) तक पहुंच रहा है तो पोर्ट निर्दिष्ट करें लेकिन आपको इंस्टेंस नाम निर्दिष्ट करना होगा।

मुझे उम्मीद है कि यह उपरोक्त त्रुटियों से उत्पन्न कुछ भ्रम को स्पष्ट करता है।

+0

"एसक्यूएलसेवर पोर्ट 1433 पर डिफ़ॉल्ट उदाहरण चलाता है" नहीं, यह डिफ़ॉल्ट रूप से गतिशील बंदरगाहों का उपयोग करता है। साथ ही, मैंने इंस्टेंस नाम निर्दिष्ट नहीं किया है, इसलिए मुझे SQL ब्राउज़र चलाने की आवश्यकता नहीं है। प्रत्येक उदाहरण एक अलग आईपी/पोर्ट संयोजन पर सुनता है, दो प्रक्रियाएं एक ही आईपी/पोर्ट संयोजन पर नहीं सुन सकती हैं। – thecarpy

+0

मैं निश्चित पोर्ट के साथ नामित उदाहरणों का उपयोग करता हूं, यह केवल डिफ़ॉल्ट पैरामीटर पर लागू होता है – Hybris95

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