[英]Codec not found for requested operation [decimal <-> java.lang.Double]
我在 Cassandra db 中有十进制值如何获取该值
cluster = Cluster.builder().addContactPoint("dev").withPort(9042).build();
cluster.getConfiguration().getCodecRegistry().register(InstantCodec.decimal());
Select select = QueryBuilder.select().from("app");
session = cluster.connect(keyspace);
ResultSet resultSet = session.execute(select);
Map<String,Map<String,Long>>map = new HashMap();
resultSet.forEach(x ->map.put(x.getString("signal_name"),x.getMap("config",String.class,Long.class)));
您不需要弄乱编解码器。 发生此错误是因为 Cassandra DECIMAL
类型不会将 map 转换为 Java Double
。
假设我有一个数字类型表,如下所示:
CREATE TABLE numerics (
num INT PRIMARY KEY,
dec DECIMAL,
doub DOUBLE,
flt FLOAT);
使用查询构建器,我可以像这样查询和 map 这些类型:
Select query = QueryBuilder.selectFrom("stackoverflow", "numerics")
.column("num")
.column("dec")
.column("doub")
.column("flt")
.whereColumn("num")
.isEqualTo(QueryBuilder.literal(1));
SimpleStatement statement = query.build();
ResultSet rs = session.execute(statement);
Row row = rs.one();
System.out.println("num(int) = " + row.getInt("num"));
System.out.println("decimal = " + row.getBigDecimal("dec"));
System.out.println("double = " + row.getDouble("doub"));
System.out.println("float = " + row.getFloat("flt"));
TL;博士;
Cassandra DECIMAL
类型映射到BigDecimal
,因此请尝试使用它。
Github 回购: https://github.com/aar0np/SelectNumerics
@sathish, decimal
CQL 数据类型映射到 java 类型的BigDecimal
。 有关详细信息,请参阅CQL 到 Java 类型映射文档。
话虽如此,这是我用一个例子所做的,我利用DataStax Astra DB来证明这一点:
表结构:
CREATE TABLE ks.sodecimal (
i int PRIMARY KEY,
j decimal
);
资料:
token@cqlsh:ks> SELECT * FROM sodecimal ;
i | j
---+-------
1 | 0.124
(1 rows)
Java 驱动程序:我正在使用DataStax Java 驱动程序4.15.0
版本,这是撰写本文时的最新版本。
...
System.out.println("-----------");
ResultSet rs_dec = session.execute("SELECT j FROM ks.sodecimal WHERE i = 1");
BigDecimal bd = rs_dec.one().getBigDecimal("j");
System.out.println("Decimal value: " + bd.toString());
System.out.println("-----------");
...
Output :
-----------
Decimal value: 0.124
-----------
我希望这有帮助!
请将鼠标悬停在cassandra
标签上,然后单击“ Watch tag
”按钮,支持 Apache Cassandra 社区。 谢谢!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.