# JDBC/ODBC unter Windows 7 x64 führt zu Fehler



## snoopysalive (23. Juni 2010)

Hallo!

Ein Java-Programm, das ich vor längerer Zeit geschrieben habe, soll nun auch unter Windows 7 x64 laufen. Das Programm baut dabei mehrer Verbindungen zu unterschiedlichen Datenbanken auf. Eine davon wird mit MS SQL 2005 aufgenommen.

Das Problem: Unter 32-bit funktioniert das nach wie vor einwandfrei, unter 64-bit erhalte ich aber die folgende Stacktrace:


```
java.sql.SQLException: [Microsoft][ODBC Driver Manager] Ungültige Zeichenfolgen- oder Pufferlänge
        at sun.jdbc.odbc.JdbcOdbc.createSQLException(Unknown Source)
        at sun.jdbc.odbc.JdbcOdbc.standardError(Unknown Source)
        at sun.jdbc.odbc.JdbcOdbc.SQLGetDataString(Unknown Source)
        at sun.jdbc.odbc.JdbcOdbcResultSet.getDataString(Unknown Source)
        at sun.jdbc.odbc.JdbcOdbcResultSet.getString(Unknown Source)
        at sun.jdbc.odbc.JdbcOdbcConnection.buildTypeInfo(Unknown Source)
        at sun.jdbc.odbc.JdbcOdbcConnection.initialize(Unknown Source)
        at sun.jdbc.odbc.JdbcOdbcDriver.connect(Unknown Source)
        at java.sql.DriverManager.getConnection(Unknown Source)
        at java.sql.DriverManager.getConnection(Unknown Source)
        at webactivation.MainFrame.getOdbcConnection(MainFrame.java:354)
        at webactivation.MainFrame.connect(MainFrame.java:288)
        at webactivation.MainFrame.init(MainFrame.java:176)
        at webactivation.MainFrame.<init>(MainFrame.java:16)
        at webactivation.Webactivation.main(Webactivation.java:5)
```

In diesem Beispiel habe ich den aktuellen JDBC/ODBC-Treiber von Microsoft verwendet, um die Verbindung aufzubauen und das Programm damit unter Windows 7 x64 kompiliert. Wenn ich den mit Java mitgelieferten JDBC/ODBC-Treiber verwende, kommt übrigens der gleiche Fehler.

Die Frage ist demnach, an was das liegt und wie ich es lösen kann. Google hat mir da noch nicht helfen können. Hier noch der Code, auf den sich der Fehler bezieht:


```
try {
	Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
	/* Bzw. */
	Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
}
catch (ClassNotFoundException e) {
	e.printStackTrace();
}

Properties props = new Properties();

props.setProperty("ssl", "true");
props.setProperty("user", /* username */);
props.setProperty("password", /* password */);

String host = "jdbc:odbc:WEBACTIVATON";
Connection connection = null;
try {
	connection = DriverManager.getConnection(host, props); // Hier knallt's!
}
catch (SQLException e) {
	e.printStackTrace();
}
```

Vielleicht seh ich ja den Wald vor lauter Bäumen nicht, aber ich wäre froh, wenn mir jemand einen Tipp geben könnte, was ich eigentlich falsch mache.

Danke
Matthias


----------



## tranquility (17. Juli 2010)

Hallo,

ich bin zufällig über dein Posting gestolpert während ich auf der Suche nach der Lösung für das gleiche Problem bin. An deinem Code ist nichts falsch. Wenn du ein 64-Bit JDK verwendest, erscheint der Fehler immer. Bei einem 32-Bit JDK nicht. Du kannst auch unter Win7/64-Bit ein 32-Bit JDK verwenden. Soweit ich gestern herausgefunden habe, liegt der Fehler daran, das Win7/64-Bit keine ODBC-Treiber für 64-Bit hat. Die Einträge in der ODBC-Console der Systemsteuerung mappen immer auf die 32-Bit Treiber. Das beißt sich halt mit dem JDK. Jetzt bin ich (noch ohne Erfolg) auf der Suche nach 64-Bit ODBC-Treibern. :-(


----------



## snoopysalive (23. Juli 2010)

Sorry, mein Mail-Account war falsch eingestellt und so hab ich erst heute deine Antwort bemerkt. 

Dann heißt es wohl, sich in Geduld üben, bis es entsprechende Treiber gibt. Danke jedenfalls für die Info!

Gruß
Matthias


----------



## janseppenrade2 (3. Dezember 2010)

Hallo,

Das beschriebene Problem hatte ich auch, es gibt eine Notlösung für das ganze.
Und zwar:
Kopiere aus der System32 eines laufenden 32bit Systems alle dateien die mit "odbc" anfangen und überschreibe alle betreffenden Dateien in System32 auf deinem 64bit System.

Dies führt allerdings zu Fehlermeldungen beim Öffnen von Paint, der Computerverwaltung und einigen Anderen Systemprogrammen.
Um diesem Fehler wiederum zu beheben, müssen die o.g. Punkte wieder rückgängig gemacht werden.

Gruß, 
Jan


----------



## MiMi (3. Dezember 2010)

Was spricht dagegen das 32-Bit JDK  zu verwenden?


----------



## riddler16 (3. Dezember 2010)

Es spricht natürlich nix dagegen das 32-Bit JDK zu verwenden nur hatte ich vor kurzer Zeit den gleichen Fehler und habe mich im ersten Moment natürlich auch gefragt ob ich etwas falsch gemacht hätte.
Und außerdem denke ich, dass es nur "normal" ist, wenn man ein 64-Bit Windows 7 hat und dazu, wie in meinem Fall, ein 64-Bit Eclipse benutzt davon ausgeht, dass alles wie gewohnt funktioniert.
Für mich war die Fehlermeldung an sich zu Beginn auch sehr wirsch.


----------

