Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java [Microsoft][ODBC驱动程序管理器]无效字符串或缓冲区长度异常_Java_Sql_Sql Server_Sqlexception - Fatal编程技术网

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

Java [Microsoft][ODBC驱动程序管理器]无效字符串或缓冲区长度异常,java,sql,sql-server,sqlexception,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.p

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

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

我做错了什么?
提前谢谢

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

它不应该与您试图打印多少列有关。它只是不喜欢您正在获取的至少一个字符串的格式。试着只打印“名称”列,看看它是否有效。如果没有,那么它可能没有被正确解码


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

这是一个java错误,至少更新到java 1.7.60

我在64位java 7更新67时遇到了这个问题。它在不同的32位机器上工作,使用相同版本的JRE。切换到32位JRE可能有效


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

我认为对于unicode字符,您需要使用
N'
表示法,如下所示:
like N'∑∑ΝIΑ
我尝试过这个,但这与此例外无关为什么在日期列上使用rs.getstring?您不想使用getdate吗?或者,您可以在SQL语句中转换最小日期和最大日期。这方面有任何文档吗?我没有任何文档。在64位的Pc机上,执行对访问的查询,它会显示这个错误。仅将java 1.7.17升级到1.7.70,此工作已更新到7 update 67,但仍存在此问题。从哪里获得7 update 70?确切地说,错误本身不是java错误,它发生在驱动程序内部,即使您使用其他语言访问ODBC数据源。