wake-up-neo.com

Erstellen Sie eine jTDS-Verbindungszeichenfolge

mein SQL Server-Instanzname ist MYPC\SQLEXPRESS und ich versuche, eine jTDS-Verbindungszeichenfolge zu erstellen, um eine Verbindung mit der Datenbank "Blog" herzustellen. Kann mir bitte jemand dabei helfen?

Ich versuche das so zu machen:

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

und ich bekomme das:

 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
51
Omu

Wie in jTDS Frequenlty Asked Questions beschrieben, lautet das URL-Format für jTDS:

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

Wenn Sie also eine Verbindung zu einer Datenbank namens "Blog" herstellen möchten, die von einem MS SQL Server unter MYPC gehostet wird, erhalten Sie möglicherweise Folgendes:

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

Oder wenn Sie getConnection(url, "sa", "s3cr3t") bevorzugen:

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

BEARBEITEN: Überprüfen Sie in Bezug auf Ihren Connection refused - Fehler, ob Sie SQL Server auf Port 1433 ausführen, ob der Dienst ausgeführt wird und ob Sie haben keine Firewall, die eingehende Verbindungen blockiert.

111
Pascal Thivent

Überprüfen Sie wirklich, wirklich, wirklich, ob das TCP/IP-Protokoll in Ihrer lokalen SQLEXPRESS-Instanz aktiviert ist.

Befolgen Sie diese Schritte, um sicherzustellen, dass:

  • Öffnen Sie " SQL Server Configuration Manager " unter "Startmenü\Programme\Microsoft SQL Server 2012\Konfigurationstools \".
  • Erweitern Sie "SQL Server-Netzwerkkonfiguration"
  • Gehen Sie in "Protokolle für SQLEXPRESS"
  • Aktivieren Sie TCP/IP

Wenn Sie ein Problem haben, überprüfen Sie diesen Blog-Beitrag für Details, da es Screenshots und viele weitere Informationen enthält.

Überprüfen Sie auch, ob der Windows-Dienst "SQL Server Browser" aktiviert ist und ausgeführt wird :

  • Gehen Sie zu Systemsteuerung -> Verwaltung -> Dienste
  • Öffnen Sie den "SQL Server Browser" -Dienst und aktivieren Sie ihn (manuell oder automatisch, abhängig von Ihren Anforderungen)
  • Starte es.

Das ist es.

Nachdem ich ein neues lokales SQLExpress installiert hatte, musste ich nur TCP/IP aktivieren und den SQL Server-Browserdienst starten.

Nachstehend ein Code, mit dem ich die lokale SQLEXPRESS-Verbindung teste. Natürlich sollten Sie die IP-Adresse, den Datenbanknamen und den Benutzer/das Kennwort nach Bedarf ändern:

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();
        }
    }
}

Und wenn Sie Maven verwenden, fügen Sie dies zu Ihrer pom.xml hinzu:

<dependency>
    <groupId>net.sourceforge.jtds</groupId>
    <artifactId>jtds</artifactId>
    <version>1.2.4</version>
</dependency>
39
acdcjunior

jdbc:jtds:sqlserver://x.x.x.x/database ersetzt x.x.x.x mit der IP oder dem Hostnamen Ihres SQL Server-Computers.

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

oder

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

Wenn Sie den Benutzernamen und das Kennwort auch in der Verbindungszeichenfolge anstelle eines separaten Verbindungsobjekts festlegen möchten:

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

(Aktualisierte meine inkorrekten Informationen und fügte einen Verweis auf Instanzsyntax hinzu.)

7

Ein Schuss im Dunkeln, aber Ihrer Fehlermeldung zufolge scheint entweder die SQL-Server-Instanz nicht auf Port 1433 ausgeführt zu werden, oder die Anforderungen an diesen Port werden blockiert

4
Pratik Bhatt