【发布时间】:2022-02-02 13:35:15
【问题描述】:
我正在努力解析从 SQLite 数据库获取的元素,但抛出异常“ResultSet is closed”。之前我对所有查询都使用了一个语句,但我知道它会导致问题,所以我在本地创建了语句。我仍然遇到同样的错误。
private Book parseBook(ResultSet result) throws SQLException {
return new Book(result.getString(1), result.getString(2), result.getString(3),
LocalDate.parse(result.getString(4)), result.getString(5), result.getString(6));
}
@Override
public Book getBook(String id) throws SQLException {
statement = conn.createStatement();
String sql = String.format(selectBooks, id);
ResultSet result = statement.executeQuery(sql);
return parseBook(result);
}
在 Main 中调用 getBook() 函数:Book data = sqlDAO.getBook(args[1]);
这是完整的错误信息:
java.sql.SQLException: ResultSet closed
at org.sqlite.core.CoreResultSet.checkOpen(CoreResultSet.java:69)
at org.sqlite.core.CoreResultSet.markCol(CoreResultSet.java:96)
at org.sqlite.jdbc3.JDBC3ResultSet.getString(JDBC3ResultSet.java:436)
at library.LibrarySQLDAO.parseBook(LibrarySQLDAO.java:37)
at library.LibrarySQLDAO.getBook(LibrarySQLDAO.java:82)
at library.Main.main(Main.java:195)
Process finished with exit code 0
我看到过同样错误的帖子,但总的来说,我看到的问题是错误地重复使用了一个语句。请给我一个提示,我做错了什么。
【问题讨论】:
-
你需要发布parseBook并注明第37行
-
@SharonBenAsher 你是什么意思?
-
堆栈跟踪指定异常发生在 parseBook 方法内部,在第 37 行。所以显示该方法的源代码并指向我们的行号。