2

ODBC 시스템 DSN을 통해 Microsoft Windows Server 2008 R2 64 비트 시스템에서 Java 6 콘솔 응용 프로그램과 Microsoft SQL Server 2008 R2를 연결하려고 시도하면 SQL Server Native Client 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); 
    } 

과 함께, 오류를 강합니다

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

, 동일한 코드를 예외 및 ODBC 시스템 DSN이 동일한 방식으로 구성, 비 (MS 서버 2008 32 비트와 일들 R2) 및 MS SQL Server 2008 R2를 지원합니다. 두 시스템 간의 Microsoft ODBC 드라이버 DLL은 다른 버전 인 6.0.xxxx와 6.1.xxxx가 있는데, 그 원인은 범인입니다.

답변

1

그래, ODBC 관리자 버전이 문제가되어야합니다. 아래는 내가 만난 문제이며, 내가 생각한 해결책은 다른 사람에게 도움이되기를 바랍니다.

Jboss 4.x에 배포 된 응용 프로그램에서 System 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)에 빈 쿼리를 보내려고하면 같은 오류 메시지가 throw됩니다. 그래서 나는 ODBC가 DS에 대해 실행하려고하는 빈 쿼리를 얻었고 그 결과는 다음과 같다고 생각합니다 : 잘못된 문자열 또는 버퍼 길이.

주어진 DSN을 사용하여 ODBC DS로 등록 된 .mdb 파일을 읽을 수 있고 독립 실행 형 응용 프로그램에서 쿼리 할 때이 오류가 발생하지 않으므로이 독서 응용 프로그램을 읽는 독립 실행 형 응용 프로그램을 만들려고합니다. ODBC를 통해 .mdb 파일을 읽고 Jboss 응용 프로그램에서 읽을 .csv 파일에 해당 내용을 씁니다.

누구든지 더 나은 해결책을 찾으면 알려 주시기 바랍니다.

1

JDBC-ODBC 브리지 원시 코드 문제. 네이티브 코드가 잘못된 BufferLength 매개 변수를 사용하여 SQLGetData ODBC 함수를 호출합니다. 이 문제는 64 비트 jvm에서만 발생합니다. 아시다시피, 1.0에서 1.7까지 모든 jdks에서 발생할 수 있습니다.

BufferLength는 8 바이트 SQLLEN 매개 변수입니다. 상위 4 바이트는 근본 원인 인 64 비트 jvm에서 초기화되지 않은 상태로 남습니다. 현재 해결 방법은 없으며 Oracle은 Oracle Metalink 웹 사이트를 통해보고했지만이 문제를 해결하기를 거부합니다.

0

이것은 자바 버그이며, 적어도 자바 1.7.70으로 업그레이드하십시오.

+1

참고 자료가 있으십니까? 이 버그가 문서화 된 Oracle 웹 사이트의 어떤 것? –

+0

나는 어떤 문서도 가지고 있지 않다. 64 비트의 Pc에서 쿼리를 실행하면이 오류가 표시됩니다. Java 1.7.17에서 1.7.70으로 만 업그레이드하면됩니다. – user503601

+0

이 의미가 있습니까? https://bugs.openjdk.java.net/browse/JDK-8038751 – Horcrux7

관련 문제