这是我的代码的一部分我的代码:
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] 无效字符串或缓冲区长度异常 "
我做错了什么? 提前致谢!
最佳答案
我会发表评论,但我没有足够的声誉。
它不应该与您尝试打印的列数有关。它只是不喜欢您正在获取的至少一个字符串的格式。尝试只打印名称列,看看它是否有效。如果不是,那么它可能没有被正确解码。
如果是这种情况,请转到您的 ODBC 数据源管理器,从用户 DSN 或系统 DSN 中选择相关的驱动程序,单击配置并在那里更改编码。如果这不起作用,请尝试更新/降级您的驱动程序。 (我遇到了同样的问题,并将我的 4D 驱动程序从 v13 更新到 v14 修复了它)。
关于java - [Microsoft][ODBC 驱动程序管理器] 无效字符串或缓冲区长度异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20204553/