【问题标题】:Unable to convert a ResultSet into a List in Cassandra datastax driver无法将 ResultSet 转换为 Cassandra datastax 驱动程序中的列表
【发布时间】:2018-12-14 09:35:19
【问题描述】:

在下面的 Cassandra 代码中,我正在查询一个数据库并期望多个值。该函数需要和 id 并且应该返回 Option[List[M]] 其中M 是我的模型。我有一个函数rowToModel(row: Row): MyModel,它可以从ResultSet 获取row 并将其转换为我的模型实例。

我的问题是我返回的List 总是空的,即使ResultSet 有数据。我通过在rowToModel 中添加调试打印来检查它

def getRowsByPartitionKeyId(id:I):Option[List[M]] = {
val whereClause = whereConditions(tablename, id);

val resultSet = session.execute(whereClause) //resultSet is an iterator
val it = resultSet.iterator();
val resultList:List[M] = List();
if(it.hasNext){

  while(it.hasNext) {
    val item:M = rowToModel(it.next())
    resultList.:+(item)
  }
  Some(resultList) //THIS IS ALWAYS List()
} 
else
  None
}

我怀疑resultListval,它的值在while 循环中没有改变。我可能应该使用yield 或其他东西,但我不知道是什么以及如何使用。

【问题讨论】:

    标签: scala cassandra


    【解决方案1】:

    通过将Java Iterator 转换为Scala 然后使用toList 来解决它

     import collection.JavaConverters._
    
    val it = resultSet.iterator();
    
    if(it.hasNext){
    
      val resultSetAsList:List[Row] = asScalaIterator(it).toList
      val resultSetAsModelList = resultSetAsList.map((row:Row) => rowToModel(row))
      Some(resultSetAsModelList)
    

    【讨论】:

      猜你喜欢
      • 2018-12-17
      • 2020-11-25
      • 2016-02-27
      • 2017-01-20
      • 2014-05-04
      • 2014-03-27
      • 1970-01-01
      • 1970-01-01
      • 2019-03-08
      相关资源
      最近更新 更多