Ich versuche, eine wirklich einfache GUI-App zum Einfügen einiger Datensätze zu schreiben in eine Datenbank, und einige Datensätze zurücklesen (nichts Besonderes, nur 1 Tabelle mit 3 Zeilen, keine Beziehungen). Die Quelle ...
%Vor%Fehler hier
%Vor%Ende Fehler
%Vor%Ich bekomme den folgenden Fehler ...
(Code) 0
(Nachricht) SQL Server hat keine Antwort zurückgegeben. Die Verbindung wurde geschlossen.
(Zustand) 08S01
Ich habe überprüft, dass der Benutzer, der Pass, der Servername, der Port und der DB-Name korrekt sind. Wenn ich den Benutzernamen in einen ungültigen ändere, bekomme ich einen "konnte mich nicht einloggen" -Fehler zurück gemeldet, damit ich weiß, dass ich den Server treffe.
Ich konnte die Verbindung nicht einmal vollständig herstellen, daher weiß ich, dass es sich nicht um ein Problem mit "zu vielen Verbindungen" handelt, da die einzige Person, die derzeit auf dem Server angemeldet ist, ich über sql management studio bin. Es funktioniert nicht, wenn ich mich abmelde, also definitiv kein Verbindungs # Problem.
Der Benutzer der Anwendung verfügt ebenfalls über Berechtigungen für Datenreader / Datenschreiber. (Ich verwende Eclipse, wenn das wichtig ist. Und referenziere die sqljdbc4.jar Bibliothek).
Ich weiß nicht, wohin ich mit der Fehlersuche gehen soll. Jede Hilfe würde sehr geschätzt werden.
BEARBEITEN Update - Ich habe auch eine Verbindungszeichenfolge versucht und DriverManager.getConnection (connString) verwendet, um die Verbindung einzurichten, die auch nicht funktioniert hat. Das Ergebnis ist das gleiche. Außerdem ist SQL Server 2008 R2 die SQL Server-Version, die ich verwende.
BEARBEITEN Ich habe ein kurzes C # -Programm geschrieben, um die Verbindung zu testen, natürlich funktioniert die Verbindung in .net, leider muss ich Java für dieses Projekt verwenden (es ist ein Projekt, das ich selbst für eine Klasse gemacht habe, nur Voraussetzung ist es ist in Java ... Lehrer hat keine Ahnung, was gerade passiert.)
Kommentiere die Zeile mit setEncrypt(true)
:
Möglicherweise haben Sie Probleme mit der Verschlüsselungseinstellung. Aus der setEncrypt (...) Dokumentation:
Wenn die Eigenschaft encrypt auf true gesetzt ist, verwendet der JDBC-Treiber von Microsoft SQL Server den standardmäßigen JSSE-Sicherheitsprovider der JVM, um die SSL-Verschlüsselung mit SQL Server auszuhandeln. Der Standardsicherheitsanbieter unterstützt möglicherweise nicht alle Funktionen, die zum erfolgreichen Aushandeln der SSL-Verschlüsselung erforderlich sind. Beispielsweise unterstützt der Standardsicherheitsanbieter möglicherweise nicht die Größe des öffentlichen RSA-Schlüssels, der im SQL Server-SSL-Zertifikat verwendet wird. In diesem Fall kann der Standardsicherheitsanbieter einen Fehler auslösen, der dazu führt, dass der JDBC-Treiber die Verbindung abbricht. Führen Sie einen der folgenden Schritte durch, um dieses Problem zu beheben:
Konfigurieren Sie den SQL Server mit einem Serverzertifikat mit einem kleineren öffentlichen RSA-Schlüssel
Konfigurieren Sie die JVM für die Verwendung eines anderen JSSE-Sicherheitsproviders in der Sicherheitseigenschaftendatei "/lib/security/java.security"
Verwenden Sie eine andere JVM
Aktualisieren
Mit den Java-Versionen 1.6.0_29 und 7.0.0_1 hat Oracle einen Sicherheitsupdate für den SSL / TLS BEAST-Angriff eingeführt, der sehr wahrscheinlich das gleiche Problem verursacht. Der obige Sicherheitsupdate verursacht bekanntermaßen Probleme bei Datenbankverbindungen mit MSSQL Server sowohl mit dem jTDS-Treiber als auch mit dem Microsoft-Treiber. Sie können entweder
setEncrypt(true)
(wie oben angegeben) nicht verwenden -Djsse.enableCBCProtection=false
festlegen. Seien Sie gewarnt, dies betrifft alle SSL-Verbindungen innerhalb derselben VM. Manchmal wird die Engine-Konfiguration so geändert, dass externe Verbindungen nicht akzeptiert werden. Nach einigen Recherchen funktionierte folgendes für mich:
Tags und Links java sql-server-2008 sqljdbc