未找到请求操作的编解码器:[timestamp <-> java.lang.Long]

Kno*_*uch 5 scala cassandra

我用 scala 编写了这个简单的程序来查询 cassandra

val session = cass.session
lazy val stmt = cass.session.prepare(
   """
     |select token(id), id, date, rId, tt
     | from foo
     | where token(id) > ?
     | and token(id) <= ?;
   """.stripMargin
)

lazy val statement = stmt.bind().setLong(0, start).setLong(1, end)

def fromRow(row: Row): Foo = {
   val token = row.getLong(0)
   val id = row.getLong(1)
   val date = row.getLong(2)
   val rId = row.getLong(3)
   val tt = row.getInt(4)
   Foo(id, date, rId, tt)
}
Run Code Online (Sandbox Code Playgroud)

但是此代码失败并出现错误

[error] (run-main-4) com.datastax.driver.core.exceptions.CodecNotFoundException: Codec not found for requested operation: [timestamp <-> java.lang.Long]
com.datastax.driver.core.exceptions.CodecNotFoundException: Codec not found for requested operation: [timestamp <-> java.lang.Long]
    at com.datastax.driver.core.CodecRegistry.notFound(CodecRegistry.java:679)
    at com.datastax.driver.core.CodecRegistry.createCodec(CodecRegistry.java:526)
    at com.datastax.driver.core.CodecRegistry.findCodec(CodecRegistry.java:506)
    at com.datastax.driver.core.CodecRegistry.access$200(CodecRegistry.java:140)
    at com.datastax.driver.core.CodecRegistry$TypeCodecCacheLoader.load(CodecRegistry.java:211)
    at com.datastax.driver.core.CodecRegistry$TypeCodecCacheLoader.load(CodecRegistry.java:208)
    at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3542)
Run Code Online (Sandbox Code Playgroud)

Kub*_*nta 11

使用驱动程序 v4.0,timestamp映射到java.time.Instant,因此: stmt.bind(Instant.ofEpochSecond(start), Instant.ofEpochSecond(end))

  • 是的,我知道,但有问题时没有有关版本的信息,现在有人可能会来这里寻找他的问题的答案(就像今天早上的我一样)。 (2认同)

Rab*_*ndi 0

在您的表 FOO 中,有一个时间戳类型列,但您在插入查询时将长值传递给该列。可能您将日期列类型定义为时间戳。插入时间戳类型值“2012-12-07T10:00:00-0000”,如下所示。