2

ODBCシステムDSN経由でMicrosoft Windows Server 2008 R2 64ビットシステムでJava 6コンソールアプリケーションからMicrosoft SQL Server 2008 R2に接続しようとしていますSQL Serverネイティブクライアント10.0。以下のソースコード:ODBCエラー:無効な文字列またはバッファ長 - Microsoft Server 2008 32ビットと2008 R2 64ビット

 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); 
    } 

が非Maddeninglyエラー

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

、同一の符号、およびMS Server 2008の32ビットとワークスまったく同じ方法で構成ODBCシステムDSNを、(スローR2)とMS SQL Server 2008 R2をサポートしています。 2つのシステム間のMicrosoft ODBCドライバーのDLLは、バージョン6.0.xxxxと6.1.xxxxの違いがありますが、それは原因は疑いがあります。

答えて

1

ええ、ODBCマネージャのバージョンが問題になるはずです。以下は、私が遭遇した問題であり、私が考えた解決策です。他の人にも役立つことを願っています。

Jboss 4.xにデプロイされたアプリケーションからシステムODBC DSN(MS Access .mdbファイル)に対してクエリを実行しようとすると、同じエラーが発生する:「SQLステート[S1090];エラーコード[0]; [Microsoft ] [ODBCドライバマネージャ]無効な文字列またはバッファ長 "Windows Server R2。

2つの異なるWindows Server R2マシンで同じエラーが再現されました。 Windows Server Standard(R1と思う)とWindows 7 Professional x64では、問題は再現できません。

さらに、同じWindows Server R2上で(スタンドアロンアプリケーションから)直接接続しようとすると、この問題は発生しません。アプリケーションがデータソースに接続/検出しない場合は、そのようなDSN名がないか、見つからないというエラーが表示されます。 ODBCデータソース(登録データソース名 - DSN)に空のクエリを送信しようとすると、同じエラーメッセージがスローされます。だから私は、ODBCは、DSに対して実行しようとする空のクエリを取得し、その結果は次のとおりです:無効な文字列またはバッファの長さ。

ODBC DSとして登録された.mdbファイルを特定のDSNで読み取ることができるため、スタンドアロンアプリケーションからクエリを実行するときにこのエラーが発生することはありません。スタンドアロンアプリケーションを作成しますODBC経由で.mdbファイルを開き、その内容を.csvファイルに書き込みます。このファイルはJbossアプリケーションで読み取られます。

誰かがより良い解決策を見つけた場合は、私に知らせてください。

1

JDBC-ODBCブリッジネイティブコードの問題。 ネイティブコードは、無効なBufferLengthパラメーターを使用してODBC関数SQLGetDataを呼び出します。 この問題は、64bitのJVMでのみ発生します。私が知っているように、それはすべてのjdksで発生する可能性があります:1.0から1.7までです。

BufferLengthは、8バイトのSQLLENパラメータです。上位4バイトは64ビットjvmで初期化されずに残され、根本的な原因です。 現時点では回避策はありません.Oracle metalinkのWebサイトから報告していますが、Oracleはこの問題の修正を拒否しています。

0

これはJavaバグです。少なくともJava 1.7.70にアップグレードしてください。

+1

これについての参考情報はありますか?このバグが文書化されているOracle Webサイト上の何か? –

+0

私はどんなドキュメンテーションも持っていません。 64ビットのPcでクエリを実行すると、このエラーが表示されます。 Java 1.7.17から1.7.70にのみアップグレードしてください。 – user503601

+0

これは、https://bugs.openjdk.java.net/browse/JDK-8038751 – Horcrux7

関連する問題