jdbc-connection mit jre7 funktioniert nicht

crashfinger

Mitglied
Hallo Zusammen!

Ich habe folgendes Problem:
Ich wollte meine Java-Programm vom Java 6 auf Java 7 umstellen.
Nachdem ich im Eclipse die JRE System Library von 1.6 auf 1.7 geändert habe funktionieren die DB-Verbindungen nicht mehr.

Beispiel Klasse:
Java:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class ConnectionTest {
	public static void main(String[] args) {
		Connection connection=null;
		try{Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 
			connection = DriverManager.getConnection("jdbc:sqlserver://myDbServer:1433;databaseName=myDB;user=******;password=******;");
			System.out.println("Connection is valid: " + connection.isValid(0));
		}
		catch (ClassNotFoundException e){e.printStackTrace();}
		catch (SQLException e)			{e.printStackTrace();}
		finally{try{connection.close();}catch(SQLException e){e.printStackTrace();}}
	}
}
Verwendeter Treiber: sqljdbc4.jar
DB Server: Microsoft SQL Server 9.00.4285

Funktioniert mit JRE6 einwandfrei
Code:
Connection is valid: true

Bei JRE7 bekomme ich folgende Fehlermeldung:
Code:
com.microsoft.sqlserver.jdbc.SQLServerException: Fehler beim Herstellen der TCP/IP-Verbindung mit dem Host 'myDbServer', Port 1433. Fehler: 'Permission denied: connect. [...]
	at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:190)
	at com.microsoft.sqlserver.jdbc.SQLServerException.ConvertConnectExceptionToSQLServerException(SQLServerException.java:241)
	at com.microsoft.sqlserver.jdbc.SocketFinder.findSocket(IOBuffer.java:2243)
	at com.microsoft.sqlserver.jdbc.TDSChannel.open(IOBuffer.java:491)
	at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:1309)
	at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:991)
	at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:827)
	at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:1012)
	at java.sql.DriverManager.getConnection(Unknown Source)
	at java.sql.DriverManager.getConnection(Unknown Source)
	at test.ConnectionTest.main(ConnectionTest.java:11)
Exception in thread "main" java.lang.NullPointerException
	at test.ConnectionTest.main(ConnectionTest.java:16)

Weiß jemand was sich von Java 6 zu Java 7 geändert hat, bzw. wo der Fehler liegt?
 
Zuletzt bearbeitet:
Nutzt du IPv4 oder v6? Setze mal -Djava.net.preferIPv4Stack=true
bei mir IPv4, die sql-server verwenden beide protokolle.
es macht auch keinen unterschied ob ich den db-server über den dns namen oder die ip anspreche.

Kann es damit zusammenhängen, dass dein jdbcconnector unter Java 1.6 compilt wurde?
ich führe den code direkt im eclipse aus - d.h. er wird immer zur laufzeit neu compiliert

Die Firewall vielleicht?
wenn es die firewall wäre würde der code unter jre6 auch nicht laufen.
 
Zuletzt bearbeitet:
Hey! der Tip mit "Djava.net.preferIPv4Stack=true" war genau richtig!

So funktioniert es:
Java:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class ConnectionTest {
	public static void main(String[] args) {
		Connection connection=null;
		// =====================================================
		System.setProperty("java.net.preferIPv4Stack" , "true");
		// =====================================================
		try{Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 
			connection = DriverManager.getConnection("jdbc:sqlserver://myDbServer:1433;databaseName=myDB;user=******;password=******;");
			System.out.println("Connection is valid: " + connection.isValid(0));
		}
		catch (ClassNotFoundException e){e.printStackTrace();}
		catch (SQLException e)			{e.printStackTrace();}
		finally{try{connection.close();}catch(SQLException e){e.printStackTrace();}}
	}
}

Vielen Dank an alle, insbesondere Ullenboom für den heißen Tip :toll:
 
Zuletzt bearbeitet:

Zurück
Oben