10 Stimmen

Verbinden mit SQL Server von Java mit deaktiviertem TCP

Ich versuche, von Java aus eine Verbindung zu einer lokalen Datenbank (SQL Server 2008) herzustellen. Ich habe die TCP-Verbindungen gemäß den Kundenanforderungen deaktiviert und kann keine Verbindung herstellen. Ich muss auch den Dienst SQL Server Browser deaktivieren.

Ich schreibe die nächste Anweisung in Java:

conexion = DriverManager.getConnection("jdbc:sqlserver://localhost\\SQLEXPRESS;user=user;password=password");

und ich habe den folgenden Fehler:

"java.net.SocketTimeoutException: Zeitüberschreitung beim Empfangen". (dann sagt es mir dass es wahrscheinlich eine Firewall gibt und dass ich den SQL Server ausführen sollte Browser starten soll).

Wenn ich versuche, eine Verbindung über das Microsoft SQL Server Managment Studio herzustellen, kann ich mit denselben Parametern eine Verbindung herstellen:

Server type: Database Engine
Server name: localhost\SQLEXPRESS
Authentication: SQL Server Authentication
User: user
Password: password

Ich weiß nicht, ob ich in Java etwas falsch mache, aber SQL Server Managment Studio ist eigentlich ein Client, wenn es also eine Verbindung herstellen kann, sollte das jeder Client können.

Bitte antworten Sie. Wenn Sie weitere Informationen benötigen, fragen Sie einfach danach.

0 Stimmen

0 Stimmen

Haben Sie eine Lösung für dieses Problem gefunden? Ich habe auch die gleiche Anforderung.

6voto

Pablo Santa Cruz Punkte 169147

Leider unterstützt der JDBC-Treiber von Microsoft keine Named Pipes-Verbindungen zu SQLServer. Sie können versuchen, einen anderen JDBC-Treiber zu verwenden.

Werfen Sie einen Blick auf jTDS . Es ist kostenlos, quelloffen und verbindet sich mit SQLServer über Named Pipes.

0 Stimmen

Hallo. Danke für die Antwort. Ich werde es mit jTDS versuchen, aber ich habe auch named piper deaktiviert, ich möchte Shared Memory verwenden. Ich bin mir sicher, dass es möglich ist, da mein Client sich von .net aus mit der gleichen Konfiguration mit der gleichen Datenbank verbinden kann. Ich werde jTDS ausprobieren, aber ich finde es sehr schade, dass der Microsoft-Treiber nicht alle Funktionen hat.

0 Stimmen

Hier ein Beispiel von jtds: stackoverflow.com/questions/11345746/

0 Stimmen

Ist es Ihnen gelungen, eine Verbindung mit dem Gemeinsamen Gedächtnis herzustellen? Ich habe auch TCP/IP und Named Pipes deaktiviert.

1voto

Earth Engine Punkte 9518

Ich gehe davon aus, dass Sie die SQL Server Express-Version verwenden, die mit Visual Studio 2010 geliefert wurde. Für andere Versionen sollte es ähnliche Lösungen geben, aber ich habe sie nicht getestet. Hier ist die Lösung:

  1. Aktivieren Sie das TCP/IP-Protokoll. Suchen Sie "SQL Server Configuration Manager" im Startmenü, erweitern Sie "SQL Server Network Configuration" und klicken Sie auf "Protocols for SQLEXPRESS", doppelklicken Sie auf "TCP/IP" und ändern Sie die Eigenschaft "Enabled" auf "Yes". Überprüfen Sie die Registerkarte "IP-Adressen" und aktivieren Sie die IP-Adressen, die Sie verwenden möchten (normalerweise "127.0.0.1").

  2. Aktivieren Sie den Benutzer sa in SQL Server. Drücken Sie Win+R und geben Sie "sqlcmd -S . \SQLEXPRESS " und führen Sie die folgenden Befehle aus:

    ALTER LOGIN sa ENABLE;
    GO
    ALTER LOGIN sa WITH PASSWORD='StrongPassword1!'
    GO
  3. Ändern Sie den Anmeldemodus, um eine explizite Anmeldung zu ermöglichen. Drücken Sie erneut Win+R und geben Sie "regedit" ein, suchen Sie den folgenden Schlüssel

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQLServer

    und ändern Sie dann den Wert "LoginMode" auf 2.

  4. Testen Sie die Konfiguration. Erstellen Sie eine Testverbindung in Visual Studio 2010, verwenden Sie den Benutzernamen "sa" und das Passwort "StrongPassword1!". Wenn Sie eine Verbindung herstellen können, sollten Sie auch eine Verbindung über JDBC herstellen können.

1voto

FrankPl Punkte 563

Ich weiß, dies ist eine alte Frage. Ich habe jedoch nachgeforscht, wie man den Shared-Memory-Zugriff auf SQL Server mit dem Microsoft JDBC-Treiber konfiguriert und bin darauf gestoßen. Die endgültige Antwort ist: Der Microsoft JDBC-Treiber unterstützt nur TCP-Verbindungen, weder Shared Memory noch Named Pipes. Da der Treiber nun Open Source ist, können Sie dies selbst im Quellcode auf GitHub überprüfen: Der relevante Code ist die lokale Klasse TDSChannel in der Toplevel-Klasse IOBuffer (derzeit gefunden aquí ). Methode open in dieser Klasse greift nur auf tcp-Sockets (und SSL-Sockets) zu, aber nicht auf Shared Memory oder Named Pipes.

Dies bedeutet, dass die Verwendung anderer Treiber als des MS JDBC-Treibers die einzige Möglichkeit ist, wenn Sie keine TCP/IP-Verbindungen verwenden können oder wollen.

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