2

Versuch, von Java 6-Konsolenanwendung mit Microsoft SQL Server 2008 R2 auf einem Microsoft Windows Server 2008 R2 64-Bit-System über ein ODBC-System-DSN zu verbinden SQL Server Native Client 10.0. Der folgende Quellcode:ODBC-Fehler: Ungültige Zeichenfolgen- oder Pufferlänge - Microsoft Server 2008 32 Bit gegenüber 2008 R2 64 Bit

 try 
     { 
      Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
      String srcURL = "jdbc:odbc:FOO"; 
      if (dbc == null) 
      { 
       dbc = DriverManager.getConnection(srcURL); 
       dbc.setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED); 
      } 
      else 
      { 
       dbc.close(); 
       dbc = DriverManager.getConnection(srcURL); 
       dbc.setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED); 
      } 
     } 
     catch (ClassNotFoundException cx) 
     { 
      System.out.println("class not found"); 
     } 
     catch (SQLException sx) 
     { 
      System.out.println("SQL Exception: " + sx); 
      log.info("SQL Exception: " + sx); 
    } 

Fehler auslöst

java.sql.exception [Microsoft] [ODBC Driver Manager] invalid string buffer length

maddeningly, den gleichen Code, mit und ODBC-System-DSN in der exakt gleichen Art und Weise konfiguriert, WORKS mit MS Server 2008 32-Bit (Nicht- R2) und MS SQL Server 2008 R2. Die Microsoft ODBC-Treiberdlls zwischen den beiden Systemen sind unterschiedliche Versionen, 6.0.xxxx vs 6.1.xxxx, die ich vermute, ist der Schuldige.

Antwort

1

Yeah die ODBC-Manager-Version sollte das Problem sein. Unten ist das Problem, auf das ich gestoßen bin und die Lösung, an die ich gedacht habe, hoffe, dass es auch jemand anderem helfen könnte.

Beim Versuch, eine Abfrage für System ODBC DSN (MS Access MDB-Datei) von einer App zu Jboss 4.x bereitzustellen, bekomme ich denselben Fehler: "SQL-Status [S1090]; Fehlercode [0]; [Microsoft ] [ODBC Driver Manager] Ungültige Zeichenfolge oder Pufferlänge "in Windows Server R2.

Ich reproduzierte den gleichen Fehler auf 2 verschiedenen Windows Server R2-Computern. Unter Windows Server Standard (R1) und Windows 7 Professional x64 ist das Problem nicht reproduzierbar.

Weiter mehr, auf dem gleichen Windows Server R2 beim Versuch, direkt (von einer eigenständigen App) zu verbinden, bekomme ich dieses Problem nicht. Wenn die Anwendung die Datenquelle nicht verbindet/erkennt, wird ein Fehler angezeigt, der besagt, dass ein solcher DSN-Name nicht existiert oder nicht gefunden wird. Dieselbe Fehlermeldung wird ausgelöst, wenn versucht wird, eine leere Abfrage an die ODBC-Datenquelle (registrierter Datenquellenname - DSN) zu senden. Also ich denke, die ODBC bekommt eine leere Abfrage, die versucht, gegen den DS auszuführen und das Ergebnis ist: Ungültige Zeichenfolge oder Pufferlänge.

Da ich die .mdb-Datei, die als ODBC DS mit gegebenem DSN registriert ist, lesen kann, und ich diesen Fehler nicht bei der Abfrage von der Standalone-App erhalte, werde ich eine eigenständige App erstellen, die die .db liest MDB-Datei über ODBC und schreiben Sie ihren Inhalt in eine CSV-Datei, die die Jboss-Anwendungen lesen werden.

Wenn jemand eine bessere Lösung findet, lass es mich wissen.

1

Ein Problem der systemeigenen JDBC-ODBC-Bridge-Codes. Die systemeigenen Codes rufen die ODBC-Funktion SQLGetData mit einem ungültigen BufferLength-Parameter auf. Dieses Problem tritt nur bei 64-Bit-JVM auf. Wie ich weiß, kann es auf allen jdks passieren: seit 1.0 bis 1.7.

Die BufferLength ist ein 8-Byte-SQLLEN-Parameter. Die hohen 4 Bytes sind in 64bit jvm nicht initialisiert, das ist die Ursache. Derzeit gibt es keine Problemumgehung, und Oracle weigert sich, dieses Problem zu beheben, obwohl ich es über die Orakel Metalink-Website gemeldet habe.

0

dies ist ein Java-Bug, upgrade auf Java 1.7.70 mindestens.

+1

Haben Sie eine Referenz? Etwas auf der Oracle-Website, auf dem dieser Fehler dokumentiert ist? –

+0

Ich habe keine Dokumentation. In Pc mit 64 Bit führe Abfrage gegen Zugriff und es zeige mir diesen Fehler. Aktualisieren Sie nur Java 1.7.17 auf 1.7.70 und dies funktioniert – user503601

+0

Sie bedeutet dies https://bugs.openjdk.java.net/browse/JDK-8038751 – Horcrux7