我有一个用ResultSet作为数据成员实现Iterator的类。本质上,该类如下所示:
public class A implements Iterator{
private ResultSet entities;
...
public Object next(){
entities.next();
return new Entity(entities.getString...etc....)
}
public boolean hasNext(){
//what to do?
}
...
}
我如何检查ResultSet是否有另一行,所以由于ResultSet本身未定义hasNext,因此可以创建有效的hasNext方法?我当时在想SELECT COUNT(*) FROM...
查询以获取计数并管理该数字以查看是否还有另一行,但我想避免这种情况。
这是一个坏主意。这种方法要求连接一直保持打开状态,直到读取最后一行为止,并且在DAO层之外,您永远都不知道何时会发生连接,并且您似乎也保持结果集处于打开状态,并且在这种情况下可能会导致资源泄漏和应用程序崩溃连接超时。你不想那样。
正常JDBC的做法是,你购买Connection
,Statement
并ResultSet
在 最短的
可能范围。通常的做法是,将多行映射到a List
或a中,Map
然后猜测它们 确实 有一个Iterator
。
public List<Data> list() throws SQLException {
List<Data> list = new ArrayList<Data>();
try (
Connection connection = database.getConnection();
Statement statement = connection.createStatement("SELECT id, name, value FROM data");
ResultSet resultSet = statement.executeQuery();
) {
while (resultSet.next()) {
list.add(map(resultSet));
}
}
return list;
}
private Data map(ResultSet resultSet) throws SQLException {
Data data = new Data();
data.setId(resultSet.getLong("id"));
data.setName(resultSet.getString("name"));
data.setValue(resultSet.getInteger("value"));
return data;
}
并如下使用:
List<Data> list = dataDAO.list();
int count = list.size(); // Easy as that.
Iterator<Data> iterator = list.iterator(); // There is your Iterator.
不要像您最初想要的那样将昂贵的数据库资源传递到DAO层之外。有关常规JDBC实践和DAO模式的更多基本示例,您可能会发现本文很有用。
我可以使用Java streams/lambda表达式来执行这个迭代,而不是使用while循环来填充列表吗?
我执行了成功的查询,返回了一些书籍。使用jdbc连接运行neo4j数据库的查询。我不明白如何列出对象“b”中的所有字段,该对象表示图形数据库中的一本书。
问题内容: 什么是迭代器和集合?这两个有关系吗? 接口迭代器是否只预定义了这些方法名称,还是用户定义了这些方法名称?下面的这四行实际上说明了什么? 谢谢。我正在看一本藏书。 问题答案: 顾名思义,Java集合是事物的集合。如果您不知道该单词,请在字典中查找。 有很多类型的集合。以集合的数学概念为例。您可以将任意事物放入集合中,但是永远不会包含同一事物。在集中的东西是没有顺序的,那就是你不能说 A
第一个twisted支持的诗歌服务器 尽管Twisted大多数情况下用来写服务器代码,但为了一开始尽量从简单处着手,我们首先从简单的客户端讲起。 让我们来试试使用Twisted的客户端。源码在twisted-client-1/get-poetry.py。首先像前面一样要开启三个服务器: python blocking-server/slowpoetry.py --port 10000 poetry
问题内容: 我试图遍历slice值并更新一个或多个值,通过索引访问它或遍历它们。然后我有以下问题。 然后我得到以下错误: 问题答案: 类型不支持索引,类型不支持。 http://play.golang.org/p/_26TUBHdDm