java - 如何使用 Astyanax 进行 Cassandra CQL 查询?

标签 java nosql cassandra cql astyanax

我正在使用 Astyanax 版本 1.56.26 和 Cassandra 版本 1.2.2

好的,简单介绍一下情况:

  1. 我使用 cqlsh 创建了一个非常简单的列族,如下所示:

    创建表用户( 名称文本主键, 年龄整数, 重量整数 );

  2. 我填充了列族(没有空列)

  3. 通过 cqlsh 查询用户会产生预期结果

  4. 现在我想以编程方式查询用户,所以我尝试如下操作:

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();
  1. 在分配权重期间,会抛出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/

相关文章:

java - 包装器在内存不足时重新启动

java - 在 2.4 上安装 gwt 2.1

performance - Couchbase查询执行时间?

c# - 使用 nosql 数据库替代 sql server

database-design - 使用Redis的地理程序设计建议

hadoop - 错误1070:使用导入无法解析CqlStorage:

java - 关于ArrayList机制的问题

Java Selenium : error: cannot access MutableCapabilities

cassandra - Cassandra 3.0多节点集群回收磁盘空间的最佳实践

javascript - 无法删除来自 Cassandra 数据库的 rows.__columns 属性