无法从resultset获取行

58wvjzkj  于 2021-06-14  发布在  Cassandra
关注(0)|答案(1)|浏览(284)

以下函数将数据保存在 cassandra . 它称之为
abstract rowToModel 方法来转换从中返回的数据 cassandra 进入各自的数据模型。

def saveDataToDatabase(data:M):Option[M] = { //TODOM - should this also be part of the Repository trait?
    println("inserting in table "+tablename+" with partition key  "+partitionKeyColumns +" and values "+data)
    val insertQuery = insertValues(tablename,data)
    println("insert query is "+insertQuery)
    try {
      val resultSet:ResultSet = session.execute(insertQuery) //execute can take a Statement. Insert is derived from Statement so I can use Insert.
      println("resultset after insert: " + resultSet)
      println("resultset applied: " + resultSet.wasApplied())
      println(s"columns definition ${resultSet.getColumnDefinitions}")
      if(resultSet.wasApplied()){
        println(s"saved row ${resultSet.one()}")
        val savedData = rowToModel(resultSet.one())
        Some(savedData)
      } else {
        None
      }
    }catch {
      case e:Exception => {
        println("cassandra exception "+e)
        None
      }
    }
  }

这个
abstract rowToModel 定义如下

override def rowToModel(row: Row): PracticeQuestionTag = {
   PracticeQuestionTag(row.getLong("year"),row.getLong("month"),row.getLong("creation_time_hour"),
      row.getLong("creation_time_minute"),row.getUUID("question_id"),row.getString("question_description"))

  }

但我在书中定义的打印语句 saveDataToDatabase 没有打印数据。我以为指纹会印出来 PracticeQuestionTag 但我看到的却是
我希望看到这样的事情- PracticeQuestionTag(2018,6,1,1,11111111-1111-1111-1111-111111111111,some description1) 当我打印时 one 从结果集。但我看到的是 resultset after insert: ResultSet[ exhausted: false, Columns[[applied](boolean)]]resultset applied: truecolumns definition Columns[[applied](boolean)]saved row Row[true]row to Model called for row nullcassandra exception java.lang.NullPointerException为什么?ResultSet,one以及columnDefinitions` 没有显示数据模型中的值吗?

hjqgdpho

hjqgdpho1#

这是故意的。insert的resultset将只包含一行,该行指示是否应用了结果。
执行条件语句时,结果集将包含一行,其中一列名为“applied”,类型为boolean。这说明条件语句是否成功。
这也是有意义的,因为resultset应该返回查询的结果,为什么要通过重新调整结果集中的所有输入来增加result set对象的数量。更多细节可以在这里找到。
当然get查询将有详细的结果集。

相关问题