Java 6 コンソール アプリから Microsoft Windows Server 2008 R2 64 ビット システム上の Microsoft SQL Server 2008 R2 に、SQL Server Native Client 10.0 を使用して ODBC システム DSN 経由で接続しようとしています。以下のソースコード:
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);
}
エラーをスローします
java.sql.exception [Microsoft] [ODBC Driver Manager] 無効な文字列バッファ長
驚くべきことに、まったく同じ方法で構成されたODBCシステム DSN を使用した同じコードは、MS Server 2008 32 ビット (非 R2) および MS SQL Server 2008 R2 で動作します。2 つのシステム間の Microsoft ODBC ドライバー dll は、6.0.xxxx と 6.1.xxxx の異なるバージョンであり、これが原因であると思われます。