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
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.
Ü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:
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 :
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>
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.)
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