2013-11-25 2 views
2

이 내 코드의 일부입니다 내 코드 :[마이크로 소프트] [ODBC 드라이버 관리자] 잘못된 문자열 또는 버퍼 길이 예외

Connection dbcon=null; 
    Statement stm; 
    ResultSet rs; 
    ResultSetMetaData metadata; 
    try { 
     Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
     } catch (java.lang.ClassNotFoundException e) { 
     System.out.print("ClassNotFoundException: "); 
      System.out.println(e.getMessage());   
     } 
    try { 
     dbcon = DriverManager.getConnection("jdbc:odbc:Bus_Info"); 
     stm = dbcon.createStatement(); 
     rs = stm.executeQuery("select distinct number, name, min(Stop_Times.departure_time), max(Stop_Times.departure_time) from Routes, Stop_Times, Stops, trips, Calendar where(stops.stop_name like'ΣΟΝΙΑ' and Stops.stop_id=Stop_Times.stop_id and Stop_Times.trip_id=trips.trip_id and trips.route_id=Routes.route_id and trips.direction='outbound' and sunday=1 and Calendar.service_id=trips.service_id)group by number, name"); 

     metadata = rs.getMetaData(); 
     int columns = metadata.getColumnCount(); 
    System.out.printf("%s\t%s\t%s\t%s", "ΑΡΙΘΜΟΣ ΓΡΑΜΜΗΣ", 
          "ΟΝΟΜΑ ΓΡΑΜΜΗΣ", "ΧΡΟΝΟΣ ΔΥΙΕΛΕΣΗΣ ΠΡΩΤΟΥ ΔΡΟΜΟΛΟΓΙΟΥ", 
          "ΧΡΟΝΟΣ ΔΙΕΛΕΥΣΗΣ ΤΕΛΕΥΤΑΙΟΥ ΔΡΟΜΟΛΟΓΙΟΥ"); 
    System.out.println(); 

    while(rs.next()) { 

     System.out.printf("%s\t%s\t%s\t%s\n", rs.getString("number"), rs.getString("name"), 
         rs.getString("min(Stop_Times.departure_time)"), 
         rs.getString("max(Stop_Times.departure_time")); 

    } 
    rs.close(); 
    stm.close(); 
     dbcon.close(); 

} catch (SQLException e) { 
     System.out.print("SQLException: "); 
     System.out.println(e.getMessage()); 
} 

여기에 문제는 내가 두 개 이상의 열을 표시 할 때, 내가 얻을 수 있다는 것입니다 이 메시지 :

"[마이크로 소프트] [ODBC 드라이버 관리자] 잘못된 문자열 또는 버퍼 길이 예외"

내가 뭘 잘못? 미리 감사드립니다. !

+0

나는 유니 코드 문자에 대해 다음과 같이'N '표기법을 사용해야한다고 생각합니다.'like N'ΣΟΝΙΑ'' – cha

+0

이 시도했지만이 예외와 관련이 없습니다. – theosot

+0

왜 rs를 사용하고 있습니까? 날짜 열에 getstring? getdate를 사용하지 않으셨습니까? 또는 SQL 문에서 최소 및 최대 날짜를 변환 할 수 있습니다 – cha

답변

2

댓글을 달았지만 평판이 충분하지 않습니다.

인쇄하려는 열의 수와 관련이 없습니다. 가져 오는 문자열 중 적어도 하나의 형식이 마음에 들지 않습니다. 이름 열만 인쇄하여 제대로 작동하는지 확인하십시오. 그렇지 않다면 아마도 올바르게 디코딩되지 않을 것입니다.

이 경우 ODBC 데이터 원본 관리자로 이동하여 사용자 DSN 또는 시스템 DSN에서 관련 드라이버를 선택하고 구성을 클릭 한 다음 인코딩을 변경하십시오. 그래도 작동하지 않으면 드라이버를 업데이트/다운 그레이드하십시오. (나는 같은 이슈를 가지고 있었고 v13에서 v14로 4D Driver를 업데이트하여 수정했다.)

1

이 자바 버그, 자바 1.7.60 이상

+0

이것에 대한 모든 문서? – showdev

+0

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

+0

7 업데이트 67로 업데이트되었지만 여전히이 문제가 발생합니다. 어디에서 7 업데이트 70을 얻습니까? –

0

내가 뭔가를 동일하게 사용하여 다른 32 비트 시스템에서 나를 위해 일하고 67 64 비트 자바 7 업데이트로이 문제가 발생 하였다 업데이트입니다 JRE 버전. 32 비트 JRE로 전환 할 수 있습니다.

64 비트 Office를 설치 한 경우 32 비트 Access 2010 ODBC 드라이버를 설치할 수 없으므로 동일한 컴퓨터에서 32 비트 JVM을 사용할 수 없습니다.

관련 문제