[Microsoft] [ODBC驱动程序管理器]无效的字符串或缓冲区长度异常

时间:2013-11-25 22:19:34

标签: java sql sql-server sqlexception

这是我的代码的一部分我的代码:

  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驱动程序管理器]无效的字符串或缓冲区长度异常”

我在做错了什么? 提前谢谢!

3 个答案:

答案 0 :(得分:3)

我会评论,但我没有足够的声誉。

它与您尝试打印的列数量无关。它只是不喜欢你提取的至少一个字符串的格式。尝试仅打印名称列,看看它是否有效。如果没有,那么它可能没有被正确解码。

如果是这种情况,请转到ODBC数据源管理员,从用户DSN或系统DSN中选择相关驱动程序,单击配置并在那里更改编码。如果这不起作用,请尝试更新/降级您的驱动程序。 (我遇到了同样的问题,并将我的4D驱动程序从v13更新到v14修复了它。)

答案 1 :(得分:1)

这是一个java bug,至少要更新到java 1.7.60

答案 2 :(得分:0)

我遇到了64位Java 7更新67的问题。它在使用相同版本的JRE的另一台32位计算机上为我工作。它可能会切换到32位JRE。

如果安装了64位Office,则无法安装32位Access 2010 ODBC驱动程序,因此我无法在同一台计算机上尝试32位JVM。