din*_*eth 3 java android dao ormlite foreign-collection
关于使用ORMLite的快速问题.我正在努力确保我的实施是正确的.有一部分文档讨论了closableIterators以及如何访问它加载了LazyForeignCollection类,需要关闭(或读到最后)才能关闭数据库连接:
注:像与Dao.iterator()方法,当你用它做,因为那里是下打开数据库的连接被延迟集合返回的迭代器必须关闭.如果你通过迭代器一直走,或者你在它上面调用close(),则会发生结束.只有ForeignCollection返回一个可关闭的迭代器.
所以我的问题很简单:只能通过closableIterator访问集合吗?我可以像使用任何其他Java集合一样使用Collection/ForeignCollection对象而不用担心数据库连接的东西(例如:foreach循环)吗?
我认为文档足以解释这一点.问题是当您完成连接时需要关闭,否则与SQL数据库的连接将保持打开状态.如果你使用一个for (Account account : accountDao)类型的图案则连接将只如果你去关闭所有的方式通过该表.如果你使用一个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();
}
Run Code Online (Sandbox Code Playgroud)
您还可以使用"wrapped iterable",它允许您使用for循环在finally中关闭.
CloseableWrappedIterable<Account> wrappedIterable =
accountDao.getWrappedIterable();
try {
for (Account account : wrappedIterable) {
...
}
} finally {
wrappedIterable.close();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2317 次 |
| 最近记录: |