gpt4 book ai didi

java - ORMLite 外国集合 : Must use ClosableIterator?

转载 作者:太空宇宙 更新时间:2023-11-03 12:41:40 27 4
gpt4 key购买 nike

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

NOTE: Like with the Dao.iterator() method, the iterator returned by a lazy collection must be closed when you are done with it because there is a connection open to the database underneath. A close happens either if you go all of the way through the iterator or if you call close() on it. Only the ForeignCollection returns a closable iterator.

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

最佳答案

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

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

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

您还可以使用“包装的可迭代对象”,它允许您在带有 for 循环的 finally 中执行关闭操作。

CloseableWrappedIterable<Account> wrappedIterable =
accountDao.getWrappedIterable();
try {
for (Account account : wrappedIterable) {
...
}
} finally {
wrappedIterable.close();
}

关于java - ORMLite 外国集合 : Must use ClosableIterator?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7060867/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com