我正在使用 Astyanax 版本 1.56.26 和 Cassandra 版本 1.2.2
好的,简单介绍一下情况:
我使用 cqlsh 创建了一个非常简单的列族,如下所示:
创建表用户( 名称文本主键, 年龄整数, 重量整数 );
我填充了列族(没有空列)
通过 cqlsh 查询
用户
会产生预期结果现在我想以编程方式查询
用户
,所以我尝试如下操作:
ColumnFamily<String, String> users =
new ColumnFamily<String, String>("users", StringSerializer.get(), StringSerializer.get());
OperationResult<ColumnList<String>> result = ks.prepareQuery(users)
.getRow("bobbydigital") // valid rowkey
.execute();
ColumnList<String> columns = result.getResult();
int weight = columns.getColumnByName("weight").getIntegerValue();
- 在分配
权重
期间,会抛出NPE! :(
我的理解是,结果
应该包含与包含“bobbydigital”
作为其行键的行关联的所有列。然后,我尝试将名为“weight”的列中的值分配给整数变量weight。我知道变量 columns
正在被分配,因为当我在分配后添加一些调试代码时,如下所示:
System.out.println("Column names = " + columns.getColumnNames());
我得到以下输出:
列名称 = [、年龄、体重]
那么为什么是空指针呢?有人能告诉我哪里错了吗?另外,为什么列名是空白的?
更新:
另外,如果我尝试以不同的方式查询,如下所示:
Column<String> result = ks.prepareQuery(users)
.getKey("bobbydigital")
.getColumn("weight")
.execute().getResult();
int x = result.getIntegerValue();
我收到以下异常:
InvalidRequestException(原因:没有足够的字节来读取组件 0 的值)
预先感谢您提供的任何帮助!
最佳答案
我发现我做错了什么。我尝试的查询方式对于 CQL 表无效。要使用 Astyanax 查询 CQL 表,您需要将 .withCQL
方法链接到 prepareQuery
方法;传递 CQL 语句作为参数。
可以找到有关将 CQL 与 Astyanax 结合使用的特定信息 here 。
关于java - 如何使用 Astyanax 进行 Cassandra CQL 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15260955/