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数据源。