# jdbc-connection mit jre7 funktioniert nicht



## crashfinger (15. Aug 2012)

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:

```
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

```
Connection is valid: true
```

Bei JRE7 bekomme ich folgende Fehlermeldung:

```
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?


----------



## Ullenboom (15. Aug 2012)

Nutzt du IPv4 oder v6? Setze mal  -Djava.net.preferIPv4Stack=true


----------



## Templarthelast (15. Aug 2012)

Kann es damit zusammenhängen, dass dein jdbcconnector unter Java 1.6 compilt wurde?


----------



## maki (15. Aug 2012)

Die Firewall vielleicht?


----------



## crashfinger (15. Aug 2012)

Ullenboom hat gesagt.:


> 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.



Templarthelast hat gesagt.:


> 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



maki hat gesagt.:


> Die Firewall vielleicht?


wenn es die firewall wäre würde der code unter jre6 auch nicht laufen.


----------



## crashfinger (15. Aug 2012)

Hey! der Tip mit "Djava.net.preferIPv4Stack=true" war genau richtig!

So funktioniert es:

```
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:


----------

