Per JDBC auf Microsoft SQL 2005

GianaSisters

Bekanntes Mitglied
Hallo Zusammen,

ich stehe vor einem großen Problem. Ein Kunde hatte zunächst den Wunsch geäußert ein Programm mit einer MySQL Datenbank zu bekommen, allerdings soll nun auf das Microsoft SQL 2005 umgeschwänkt werden. Jetzt sitze ich schon den Ganzen Tag dran eine Verbindung aufzubauen bzw bin ich mir gar nicht sicher, ob ich bei dem ganzen konfigurieren der Datenbank alles richtig gemacht habe. Jedenfalls kann ich im Management Studio in dem Schema "master" das Beispielschema "SELECT * FROM spt_values" aufrufen.

Meine kleine Software liest aus einer Textbox die Connection URL aus die ich fürs Testen immer mal umändere. In der Libary hab ich: msbase.jar, mssqlserver.jar, msutil.zip und sqlijdbc4.jar

Ich habe schon viele URL Statements aufgerufen z.b.: jdbc:sqlserver://TIMO-PC\SQLEXPRESS:1433;databaseName=master;Integrated Security=True;

Als Fehlermeldung kommt in diesem Fall übrigens:
com.microsoft.sqlserver.jdbc.SQLServerException: Fehler beim Herstellen der TCP/IP-Verbindung mit dem Host 'TIMO-PC', Port 1433. Fehler: 'Connection refused: connect. Überprüfen Sie die Verbindungseigenschaften, und stellen Sie sicher, dass eine SQL Server-Instanz auf dem Host ausgeführt wird, die TCP/IP-Verbindungen am Port annimmt. Überprüfen Sie außerdem, dass die TCP-Verbindungen mit dem Port nicht von einer Firewall blockiert werden.'.


Hier das eigentliche Programm (wie gesagt String url kommt aus einem Textfeld):
Java:
import java.sql.*;

public class connectURL {

	public void starten(String url) {
		// jdbc:sqlserver://localhost:1433;
		// Create a variable for the connection string.
		String connectionUrl = url ;
                String user = "sa";
                String pw = "sa";
                 
		// Declare the JDBC objects.
		Connection con = null;
		Statement stmt = null;
		ResultSet rs = null;
		
        	try {
        		// Establish the connection.
       // 		Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
                    Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
       
                    con = DriverManager.getConnection(connectionUrl, user, pw);
            
            		// Create and execute an SQL statement that returns some data.
            		String SQL = "SELECT * FROM spt_values";
            		stmt = con.createStatement();
            		rs = stmt.executeQuery(SQL);
            
            		// Iterate through the data in the result set and display it.
            		while (rs.next()) {
            			System.out.println(rs.getString(4) + " " + rs.getString(6));
            		}
        	}
        
		// Handle any errors that may have occurred.
		catch (Exception e) {
			e.printStackTrace();
		}

		finally {
			if (rs != null) try { rs.close(); } catch(Exception e) {}
	    		if (stmt != null) try { stmt.close(); } catch(Exception e) {}
	    		if (con != null) try { con.close(); } catch(Exception e) {}
		}
	}
}
Würde mich freuen wenn mir Jemand helfen kann... Vielleicht liegts ja auch an den Konfigurationen vom Server ?!
 
Zuletzt bearbeitet von einem Moderator:
- Die Jardatei sqljdbc.jar hast Du eingebunden -> OK
- Der Treibername bei Class.forName() stimmt -> OK
- Die connection URL sollte anders aussehen (siehe hier: Verwenden des JDBC-Treibers) -> Korrigiere das
- Die Fehlermeldung ist eindeutig. Die Connection wird vom Zielhost refused. D.h. entweder läuft Dein Server auf einem anderen Port, oder irgendeine Firewall (lokal auf dem Server oder im Netzwerk) blockiert Verbindungsanfragen auf diesem Port. -> Überprüfe das
 
Hallo Nillehammer,

bis hierher vielen Dank. Leider weiß ich nicht, wo ich den Port mir Anzeigen lassen kann worunter der Server läuft. Per Hand hab ich den allerdings nichts geändert. Die connectionURLs hab ich schon alle getestet, aber solange der Server vielleicht noch gar keinen Zugriff zulässt, kanns ja an beiden Seiten liegen - das ist das blöde daran. 🙁
Gruss, Giana 🙂
 
Bei Windows die Dos-Box öffnen und folgenden Befehl eingeben:
Code:
netstat -anb -p tcp
Damit werden Dir alle TCP-Verbindungen und auch alle auf TCP-Ports horchenden Serverdienste inklusive des Programmnamens angezeigt. Du musst nach der Zeile mit dem exe-Namen des SQLServers suchen. Als IP müsste da entweder 0.0.0.0 (horcht auf allen Interfaces) oder eine IP des Servers stehen. Das hinter dem Doppelpunkt ist die Portnummer.
 
Zuletzt bearbeitet von einem Moderator:
Anzeigt wurde mir:
TCP 0.0.0.0:49167 [sqlservr.exe]
Alle anderen EXEs hatten nichts damit zu tun.

Als connectionURL hab ich: jdbc:sqlserver://TIMO-PC\SQLEXPRESS:49169;databaseName=master;Integrated Security=True;

verwendet.
Eine vermutliche endschlosschleife entsteht mit:

04.11.2011 16:40:57 com.microsoft.sqlserver.jdbc.SQLServerConnection Prelogin
WARNUNG: ConnectionID:1 Prelogin error: host TIMO-PC port 49169 Unexpected end of prelogin response after 0 bytes read
04.11.2011 16:40:57 com.microsoft.sqlserver.jdbc.SQLServerConnection Prelogin
WARNUNG: ConnectionID:1 Prelogin error: host TIMO-PC port 49169 Unexpected end of prelogin response after 0 bytes read
04.11.2011 16:40:57 com.microsoft.sqlserver.jdbc.SQLServerConnection Prelogin
WARNUNG: ConnectionID:1 Prelogin error: host TIMO-PC port 49169 Unexpected end of prelogin response after 0 bytes read
04.11.2011 16:40:57 com.microsoft.sqlserver.jdbc.SQLServerConnection Prelogin
WARNUNG: ConnectionID:1 Prelogin error: host TIMO-PC port 49169 Unexpected end of prelogin response after 0 bytes read
04.11.2011 16:40:58 com.microsoft.sqlserver.jdbc.SQLServerConnection Prelogin
WARNUNG: ConnectionID:1 Prelogin error: host TIMO-PC port 49169 Unexpected end of prelogin response after 0 bytes read
04.11.2011 16:40:58 com.microsoft.sqlserver.jdbc.SQLServerConnection Prelogin

Sieht auf jeden Fall schonmal ein bißchen vielversprechend aus... Hast Du nun noch eine Idee?
 
AHHHH. Port war 49167 !!!! DANKE DANKE 🙂 Jetzt klappt alles... Die URL war dann:
jdbc:sqlserver://TIMO-PC\SQLEXPRESS:49167;databaseName=master;Integrated Security=True;
 
Ich nehme mal an TIMO-PC ist der Hostname des Servers? Ansonsten kommen mir noch zwei Sachen in Deiner Connection-URL spanisch vor:
- \SQLEXPRESS: Was ist das? Und bist Du Dir bei dem Backslash wirklich sicher?
- Integrated Security=True: Das Leerzeichen ist mir suspekt. Bist Du Dir da auch sicher?
Wie gesagt, es kommt mir spanisch vor. Kann sein, dass das sogar gültige Connection-URLs sind (Microsoft macht ja immer gern mal ein bischen Schweinkram). Aber bei Backslashes und Leerzeichen in URLs werde ich immer hellhörig.

// Edit: Antwort kam zu spät. Es passt wohl jetzt alles 🙂
 
Zuletzt bearbeitet von einem Moderator:
Wenn ich den das MS SQL Server Management Studio aufrufe erscheint bei der Anmeldung "TIMO-PC\SQLEXPRESS" als Servername. Als Authentifizierung hab ich SQL Server-Authentifizierung genommen. Beim rumgoogeln hab ich ausgefunden, dass man "Integrated Security=True;" wohl hinten dran setzen muss, damit er das nicht als "Windows-Authentifizierung" sieht. Vielleciht konnte sogar ich Dir damit was helfen...
Ohne "Integrated Security=True;" und "databaseName=master" scheints komischerweise auch zu funktionieren. Dabei ist master doch das Schema, komisch... kann man also bei MS SQL über mehrere Schemen Tabellen aufrufne ?!
Viele Grüße und großer Danke,
Giana / Timo 🙂
 
Zuletzt bearbeitet:
Nur zur Info, damit es nicht zu späteren Verwirrungen kommt.

Wenn ich den das MS SQL Server Management Studio aufrufe erscheint bei der Anmeldung "TIMO-PC\SQLEXPRESS" als Servername ... ...
SQLEXPRESS ist der Instanzname.


... Dabei ist master doch das Schema, komisch... kann man also bei MS SQL über mehrere Schemen Tabellen aufrufne ...
Master heißt eine Systemdatenbank. Üblicherweise verbindet man sich nicht mit [Master] sondern mit seiner Datenbank, welche man angelegt hat.
 
Leider hab ich nun an meinem richtigen Desktop Computer das Problem das ich keinen Port angezeigt bekomme und somit nicht auf die Datenbank zugreifen kann... Beim ausführen von Netstats bekomme ich die Ausgabe wie unten. Der Server läuft auf jedenfall und ich habe alle relevanten Ports durchprobiert. Wie finde ich den Richtigen ?

Aktive Verbindungen

Proto Lokale Adresse Remoteadresse Status
TCP 0.0.0.0:135 0.0.0.0:0 ABH™REN
RpcSs
[svchost.exe]
TCP 0.0.0.0:445 0.0.0.0:0 ABH™REN
Es konnten keine Besitzerinformationen abgerufen werden.
TCP 0.0.0.0:5357 0.0.0.0:0 ABH™REN
Es konnten keine Besitzerinformationen abgerufen werden.
TCP 0.0.0.0:49152 0.0.0.0:0 ABH™REN
[wininit.exe]
TCP 0.0.0.0:49153 0.0.0.0:0 ABH™REN
eventlog
[svchost.exe]
TCP 0.0.0.0:49154 0.0.0.0:0 ABH™REN
Schedule
[svchost.exe]
TCP 0.0.0.0:49155 0.0.0.0:0 ABH™REN
[services.exe]
TCP 0.0.0.0:49156 0.0.0.0:0 ABH™REN
[lsass.exe]
TCP 127.0.0.1:50331 0.0.0.0:0 ABH™REN
[netbeans.exe]
TCP 192.168.2.103:139 0.0.0.0:0 ABH™REN
Es konnten keine Besitzerinformationen abgerufen werden.
TCP 192.168.2.103:49152 192.168.2.103:51072 WARTEND
TCP 192.168.2.103:49152 192.168.2.103:51073 WARTEND
TCP 192.168.2.103:49155 192.168.2.103:51074 WARTEND
TCP 192.168.2.103:49155 192.168.2.103:51075 WARTEND
TCP 192.168.2.103:49155 192.168.2.103:51076 WARTEND
TCP 192.168.2.103:49155 192.168.2.103:51077 WARTEND
TCP 192.168.2.103:49155 192.168.2.103:51078 WARTEND
TCP 192.168.2.103:49155 192.168.2.103:51079 WARTEND
TCP 192.168.2.103:49155 192.168.2.103:51080 WARTEND
TCP 192.168.2.103:49155 192.168.2.103:51081 WARTEND
TCP 192.168.2.103:49155 192.168.2.103:51082 WARTEND
TCP 192.168.2.103:49155 192.168.2.103:51083 WARTEND
TCP 192.168.2.103:51087 85.158.183.169:80 WARTEND
TCP 192.168.2.103:51091 85.158.183.169:80 WARTEND
TCP 192.168.2.103:51092 85.158.183.169:80 WARTEND
TCP 192.168.2.103:51093 85.158.183.169:80 WARTEND
TCP 192.168.2.103:51096 85.158.183.169:80 WARTEND
TCP 192.168.2.103:51097 85.158.183.169:80 WARTEND
TCP 192.168.2.103:51099 85.158.183.169:80 WARTEND
TCP 192.168.2.103:51100 85.158.183.169:80 WARTEND
TCP 192.168.2.103:51101 85.158.183.169:80 WARTEND
TCP 192.168.2.103:51102 85.158.183.169:80 WARTEND
TCP 192.168.2.103:51103 85.158.183.169:80 WARTEND
TCP 192.168.2.103:51104 85.158.183.169:80 WARTEND
TCP 192.168.2.103:51105 85.158.183.169:80 WARTEND
TCP 192.168.2.103:51106 85.158.183.169:80 WARTEND
TCP 192.168.2.103:51108 85.158.183.169:80 WARTEND
TCP 192.168.2.103:51109 85.158.183.169:80 WARTEND
TCP 192.168.2.103:51110 85.158.183.169:80 WARTEND
TCP 192.168.2.103:51111 85.158.183.169:80 WARTEND
TCP 192.168.2.103:51112 85.158.183.169:80 WARTEND
TCP 192.168.2.103:51114 85.158.183.169:80 WARTEND
TCP 192.168.2.103:51115 85.158.183.169:80 WARTEND
TCP 192.168.2.103:51117 85.158.183.169:80 WARTEND
TCP 192.168.2.103:51118 85.158.183.169:80 WARTEND
TCP 192.168.2.103:51119 85.158.183.169:80 WARTEND
TCP 192.168.2.103:51120 85.158.183.169:80 WARTEND
 
Hey Leute,

Ich habe das gleiche Problem aber verwende Microsoft SQL Server 2012 Express:

Meine Fehlermeldung
SQL:
com.microsoft.sqlserver.jdbc.SQLServerException: Fehler beim Herstellen der TCP/
IP-Verbindung mit dem Host 'localhost', Port 1433. Fehler: 'Connection refused:
connect. überprüfen Sie die Verbindungseigenschaften. Stellen Sie sicher, dass eine SQL Server-Instanz auf dem Host ausgeführt wird und am Port TCP/IP-Verbindungen akzeptiert. Vergewissern Sie sich, dass am Port keine TCP-Verbindungen durch eine Firewall blockiert werden.
java.lang.NullPointerException

Ich verwende SQL-Server-Authentifizierung - Über das Management Studio komme ich mit "sa" und "12345678" hinein.
Meine Datenbank heißt "etikettenaustausch".

Mein Hostname: "LIEFERSCHEIN" und die Instanz "SQLEXPRESS" (Somit LIEFERSCHEIN\SQLEXPRESS".



Java:
/**
   * Connection to SQLServer Database
   */
  private static Connection getSQLServer2012Connection() {
    Connection con = null;
 
    try {
        Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
      String URL = "jdbc:sqlserver://localhost;database=etikettenaustausch;integratedSecurity=true;";
	  String login = "sa";
	  String mdp = "12345678";
  	con = DriverManager.getConnection(URL,login,mdp);
    } catch (Exception e) {
      System.out.println(e);
    }
    return con;
  }

Habt ihr eine Idee was das sein könnte?
 
Lauscht der Server denn am Port 1433?
Lässt sich zB. mit telnet prüfen.
Falls nicht -> öffnen
 
Also Telnet localhost 1433 (Weil es lokal läuft der SQL Server 2012)?

Da sagt er keine Verbindung kann hergestellt werden ..mmhh

ich habe aber in der Windows-Firewall erweitert, sowohl ein- und ausgehende Regel den Port 1433 zugelassen für alle??
 
Sehe da kein Firewall Problem.
Bei aktuelleren SQL Servern wird von Haus aus nicht mehr am Port 1433 gelauscht, musst du konfigurieren.
 
Das Problem habe ich erst mit dem Sql Server 2012 der 2005 ging einwandfrei.

Ich habe Alle IPs im Konfigur. Manager so eingestellt also fixer Port.

Beim 2005 habe ich diesen tdjs Treiber verwendet beim 2012 deen offiziellen microsoft und davon die jar Datei jdbc4.

Es geht trotzdem nicht.
 
Lösung:

Man muss unten bei der Option "AllIp" den dynamischen Port auf 0 stellen und beim Port dann den fixen z.b.: 1433 eingeben und beim der IP-Option, wo localhost bzw. 127.0.0.1 steht dann auch 1433 hineinschreiben.

Danach sich wie ich jetzt grad mit irgendeiner auth.dll rumschlagen...
 

Neue Themen


Zurück
Oben