62 Stimmen

Erstellen Sie eine jTDS-Verbindungszeichenfolge

Mein Sql-Server-Instanzname lautet MYPC \SQLEXPRESS und ich versuche, eine jTDS-Verbindungszeichenfolge zu erstellen, um eine Verbindung zur Datenbank "Blog" herzustellen. Kann mir jemand helfen, das zu erreichen?

Ich versuche, es so zu machen:

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

und ich bekomme dies:

 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

123voto

Pascal Thivent Punkte 548176

Wie in der jTDS beschrieben Häufig gestellte Fragen ist das URL-Format für jTDS:

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

Um also eine Verbindung zu einer Datenbank mit dem Namen "Blog" herzustellen, die von einem MS SQL Server gehostet wird, der auf MYPC kann das Ergebnis in etwa so aussehen:

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

Oder, wenn Sie es vorziehen, die getConnection(url, "sa", "s3cr3t") :

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

EDITAR: Bezüglich Ihrer Connection refused Fehler, überprüfen Sie, ob Sie SQL Server an Port 1433 ausführen, ob der Dienst läuft und ob Sie keine Firewall haben, die eingehende Verbindungen blockiert.

44voto

acdcjunior Punkte 123383

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

Befolgen Sie diese Schritte, um dies sicherzustellen:

  • Öffnen " Sql Server Konfigurations-Manager " in "Startmenü \Programs\Microsoft SQL Server 2012 \Configuration Tools\"
  • Erweitern Sie "SQL Server-Netzwerkkonfiguration".
  • Gehen Sie in "Protokolle für SQLEXPRESS"
  • TCP/IP einschalten

Wenn Sie ein Problem haben, prüfen Sie dieser Blogbeitrag für Details, da sie Screenshots und viele weitere Informationen enthält.

Prüfen Sie auch, ob der Windows-Dienst "SQL Server Browser" ist aktiviert und läuft :

  • Gehen Sie zu Systemsteuerung -> Verwaltung -> Dienste
  • Öffnen Sie den Dienst "SQL Server Browser" und aktivieren Sie ihn (manuell oder automatisch, je nach Bedarf)
  • Starten Sie es.

Das war's.

Nachdem ich einen neuen lokalen SQLExpress installiert hatte, musste ich nur noch TCP/IP aktivieren und den SQL Server Browser-Dienst starten.

Nachfolgend ein Code, den ich zum Testen der lokalen SQLEXPRESS-Verbindung verwende. Natürlich sollten Sie die IP, den Datenbanknamen und Benutzer/Passwort 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>

9voto

Courtney Faulkner Punkte 1950

jdbc:jtds:sqlserver://x.x.x.x/database Ersetzen von x.x.x.x mit der IP oder dem Hostnamen Ihres SQL Server-Rechners.

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

o

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

Wenn Sie den Benutzernamen und das Kennwort in der Verbindungszeichenfolge zu statt gegen ein Verbindungsobjekt separat festgelegt werden sollen:

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

(Ich habe meine falschen Informationen aktualisiert und einen Hinweis auf die Instanzsyntax )

4voto

Pratik Bhatt Punkte 687

Ein Schuss ins Blaue, aber So wie Ihre Fehlermeldung aussieht, scheint es, dass entweder die Sqlserver-Instanz nicht auf Port 1433 läuft oder etwas die Anfragen an diesen Port blockiert

-1voto

Nelda.techspiress Punkte 573

SQLServer führt die Standardinstanz über Port 1433 aus. Wenn Sie als Port 1433 angeben, wird SQLServer nur nach der Standardinstanz suchen. Der Name der Standardinstanz wurde bei der Einrichtung erstellt und lautet normalerweise SQLEXPRESSxxx_xx_ENU .

Der Instanzname stimmt auch mit dem Ordnernamen überein, der unter Programme -> Microsoft SQL Server erstellt wurde. Wenn Sie also dort einen Ordner mit dem Namen SQLEXPRESSxxx_xx_ENU sehen, ist dies die Standardinstanz.

Ordner mit dem Namen MSSQL12.meinInstanzName (für SQLServer 2012) werden in SQL Server als Instanzen bezeichnet und sind no Zugriff über Port 1433.

Wenn Ihr Programm also auf eine Standardinstanz in der Datenbank zugreift, geben Sie Port 1433 an, und Sie brauchen den Instanznamen nicht anzugeben.

Wenn Ihr Programm auf eine benannte Instanz (nicht die Standardinstanz) in der Datenbank zugreift NICHT den Port angeben, aber Sie müssen den Instanznamen angeben.

Ich hoffe, dass dies die Verwirrung, die von den obigen Fehlern ausgeht, etwas aufklärt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X