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