这是我的代码的一部分我的代码:
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驱动程序管理器]无效的字符串或缓冲区长度异常”
我在做错了什么? 提前谢谢!答案 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。