2

试图使用通过ODBC系统DSN从Java 6的控制台应用程序到Microsoft SQL Server 2008 R2的的Microsoft Windows Server 2008 R2 64位系统上连接SQL Server Native Client 10.0。下面的源代码:ODBC错误:无效的字符串或缓冲区长度 - 微软Server 2008的32位VS 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); 
    } 

抛出错误

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

令人恼火,相同的代码,以及ODBC系统DSN在确切相同的方式配置,WORKS与MS Server 2008的32位(非R2)和MS SQL Server 2008 R2。这两个系统之间的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尝试直接连接(从独立的应用程序)时,服务器R2,我不明白这个问题。如果应用程序无法连接/检测数据源,则会出现错误,指出没有此类DSN名称或找不到该名称。尝试向ODBC数据源(注册数据源名称 - DSN)发送空查询时引发相同的错误消息。所以我猜ODBC会得到一个空的查询,它试图针对DS执行,结果是:无效的字符串或缓冲区长度。

因为我可以读注册为ODBC DS与给定的DSN的.mdb文件,并从独立的应用程序查询时,我没有得到这个错误,我要做一个独立的应用程序,将读.mdb文件,并将其内容写入一个.csv文件,Jboss应用程序将读取该文件。

如果有人找到更好的解决方案,请让我知道。

1

JDBC-ODBC桥本机代码的问题。 本机代码使用无效的BufferLength参数调用ODBC函数SQLGetData。 此问题仅在64位jvm上发生。据我所知,它可以发生在所有jdks上:从1.0到1.7。

BufferLength是一个8字节的SQLLEN参数。高4字节在64位jvm中未初始化,这是根本原因。 目前没有解决方法,即使我通过oracle metalink网站报告,Oracle拒绝解决此问题。

0

这是一个java错误,至少升级到java 1.7.70。

+1

您有参考吗? Oracle网站上记录了这个错误的东西? – 2014-06-11 09:03:37

+0

我没有任何文档。在PC与64位执行查询againt访问和它显示我这个错误。只有Java的1.7.17升级到70年7月1日,该工程 – user503601 2014-06-11 12:13:08

+0

你意味着这个https://bugs.openjdk.java.net/browse/JDK-8038751 – Horcrux7 2015-03-19 12:52:41

相关问题