2013-11-25 2 views
2

это часть моего кода мой код:[Microsoft] [ODBC Manager Driver] Недопустимая строка или буфер длиной исключения

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

проблема здесь заключается в том, что, когда я хочу, чтобы отобразить два или несколько столбцов, я получаю это сообщение:

"[Microsoft] [ODBC Driver Manager] Недопустимая строка или исключение длина буфера"

что я делаю неправильно? благодарим заранее!

+0

Я думаю, что для символов Юникода вам нужно использовать нотацию N''', например: 'like N'ΣΟΝΙΑ'' – cha

+0

Я пробовал это, но это не связано с этим исключением – theosot

+0

Почему вы используете rs. getstring в столбце даты? Разве вы не хотели использовать getdate? В качестве альтернативы вы можете преобразовать свои минимальные и максимальные даты в оператор SQL – cha

ответ

2

Я бы прокомментировал, но у меня недостаточно репутации.

Это не должно быть связано с тем, сколько столбцов вы пытаетесь напечатать. Это просто не нравится формат, по крайней мере, одной из строк, которые вы извлекаете. Попробуйте напечатать только столбец имен и посмотреть, работает ли он. Если нет, то это, вероятно, неправильно декодируется.

Если это так, перейдите к своему администратору источника данных ODBC, выберите соответствующий драйвер из пользовательского DSN или системного DSN, нажмите «Настроить» и измените его. Если это не сработает, попробуйте обновить/понизить драйвер. (У меня была такая же проблема и обновление моего драйвера 4D от v13 до v14 исправлено).

1

это ява ошибка, обновление Java 1.7.60, по крайней мере

+0

Любая документация по этому вопросу? – showdev

+0

У меня нет документации. В Pc с 64-битным выполнением запроса againt Access и он покажет мне эту ошибку. Только обновить java 1.7.17 до 1.7.70, и это работает – user503601

+0

Я обновил до 7 обновлений 67, но у меня все еще есть эта проблема. Откуда у вас 7 обновлений 70? –

0

у меня был этот вопрос с 64-битной Java 7 обновлений 67. Он работает для меня на другой 32-битной машине, используя тот же версия JRE. Возможно, он переключится на 32-битную JRE.

32-разрядный драйвер ODBC Access 2010 не может быть установлен, если у вас установлен 64-битный Office, поэтому я не могу попробовать 32-разрядную JVM на том же компьютере.

Смежные вопросы