我正在使用UCanAccess查询Access数据库(显然......),由于某些原因,我无法引用getMetaData()
,尽管其他一切都有效。
例如,此代码将ResultSet
转换为JSON:
public static JSONArray convertToJSON(ResultSet resultSet) throws Exception {
JSONArray jsonArray = new JSONArray();
while (resultSet.next()) {
System.out.println("Outputting record");
//int columnCount = 20;
int columnCount = resultSet.getMetaData().getColumnCount();
for (int i = 0; i < columnCount; i++) {
JSONObject obj = new JSONObject();
obj.put(String.valueOf(i), resultSet.getObject(i + 1));
jsonArray.put(obj);
}
}
return jsonArray;
}
运行此命令时会返回以下错误:
Outputting record
net.ucanaccess.jdbc.UcanaccessSQLException: UCAExc:::3.0.6 statement is closed
at net.ucanaccess.jdbc.UcanaccessResultSet.getMetaData(UcanaccessResultSet.java:480)
at passport.AccessQueryServlet.convertToJSON(AccessQueryServlet.java:76)
at passport.AccessQueryServlet.doGet(AccessQueryServlet.java:44)
但是如果使用已注释掉的int columnCount = 20;
,那么它确实有效(尽管我无法检索没有getMetaData
的列名!)。
为什么这句话显然是closed
的任何想法虽然我仍然可以从中读取数据?