gpt4 book ai didi

Scala:通过生成器(可迭代)公开 JDBC ResultSet

转载 作者:行者123 更新时间:2023-12-03 21:13:19 26 4
gpt4 key购买 nike

我在数据库中有一组行,我想提供一个界面来像这样旋转它们:

def findAll: Iterable[MyObject]

我们不需要一次将所有实例都保存在内存中。在 C# 中,您可以使用 yield 轻松创建这样的生成器,编译器负责将循环记录集的代码转换为迭代器(有点反转它)。

我当前的代码如下所示:
def findAll: List[MyObject] = {
val rs = getRs
val values = new ListBuffer[MyObject]
while ( rs.next() )
values += new valueFromResultSet(rs)
values.toList
}

有没有办法可以将其转换为不将整个集合存储在内存中?也许我可以使用 a 来理解?

最佳答案

我遇到了同样的问题,基于上述想法,我通过简单地编写一个适配器类创建了以下解决方案:

class RsIterator(rs: ResultSet) extends Iterator[ResultSet] {
def hasNext: Boolean = rs.next()
def next(): ResultSet = rs
}

有了这个,你可以例如在结果集上执行 map 操作 - 这是我个人的意图:
val x = new RsIterator(resultSet).map(x => {
(x.getString("column1"), x.getInt("column2"))
})

附加 .toList为了强制评价。如果在使用这些值之前关闭了数据库连接,这将非常有用。否则,您将收到一条错误消息,指出在连接关闭后您无法访问 ResultSet。

关于Scala:通过生成器(可迭代)公开 JDBC ResultSet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2102662/

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