3

关于使用 ORMLite 的快速问题。我试图确保我的实现是正确的。有一部分文档讨论了 closableIterators 以及如何访问它来加载 LazyForeignCollection 类,并且需要关闭(或读取到最后)才能关闭数据库连接:

注意:与 Dao.iterator() 方法一样,惰性集合返回的迭代器在完成后必须关闭,因为下面有一个到数据库的连接。如果您一直通过迭代器或调用 close() ,则会发生关闭。只有 ForeignCollection 返回一个可关闭的迭代器。

所以我的问题很简单:只能通过 closableIterator 访问集合吗?我是否能够像使用任何其他 Java 集合一样使用 Collection / ForeignCollection 对象,而不必担心数据库连接的东西(例如:foreach 循环)?

4

1 回答 1

6

我认为文档足以解释这一点。问题是完成后需要关闭连接,否则与 SQL 数据库的连接将保持打开状态。如果您使用一种for (Account account : accountDao)模式,那么只有在您完全通过表格时才会关闭连接。如果你使用一个或其他语句(return、goto、exception 等)在中间跳出循环,那么 ORMLite 不会自动关闭连接。break

如果您要跳出循环,则文档中指定了要使用的正确模式。 http://ormlite.com/docs/iterator

CloseableIterator<Account> iterator = accountDao.closeableIterator();
try {
    while (iterator.hasNext()) {
        Account account = iterator.next();
        ...
    }
} finally {
    iterator.close();
}

您还可以使用“包装的可迭代”,它允许您在 finally 中使用 for 循环进行关闭。

CloseableWrappedIterable<Account> wrappedIterable =
    accountDao.getWrappedIterable();
try {
    for (Account account : wrappedIterable) {
        ...
    }
} finally {
    wrappedIterable.close();
}
于 2011-08-16T06:05:57.620 回答