Hector API中用于cassandra DB的SliceQuery抛出HInvalidRequestException:InvalidRequestException(why:Key可能不为空)

时间:2011-10-09 07:37:20

标签: cassandra resultset hector

我有用户名和密码作为使用userName键入的ColumnFamily的列。

  

使用比较器= UTF8Type创建列族TestUserInfo   column_metadata = [{column_name:username,validation_class:UTF8Type},                      {column_name:password,validation_class:UTF8Type}];

当密钥存在于db中时,以下代码可以正常工作。抛出 me.prettyprint.hector.api.exceptions.HInvalidRequestException:InvalidRequestException(why:Key可能不为空)当密钥不存在时。

    SliceQuery<String, String, String> sliceQuery = HFactory.createSliceQuery(cassandraDBObject.getKeyspace(), StringSerializer.get(), StringSerializer.get(), StringSerializer.get());
    sliceQuery.setColumnFamily("TestUserInfo");
    sliceQuery.setKey(userName);
    sliceQuery.setColumnNames("username", "password");
    String userNameFromDB = null;
    String passwordFromDB = null;
    try {
        [Error here -->] QueryResult<ColumnSlice<String, String>> queryResult = sliceQuery.execute();
        ColumnSlice<String, String> resultCol = queryResult.get();
        System.out.println(resultCol);
        userNameFromDB = resultCol.getColumnByName("username").getValue();
        passwordFromDB = resultCol.getColumnByName("password").getValue();
    } catch (Exception e) {
        e.printStackTrace();
    }

你能告诉我我哪里出错吗?或者这是预期的行为?如果是,那我该如何检查空结果?假设我正在检查db的登录信息。那么如果userName(Key)不在db中,那么我需要得到一个空结果吗?

谢谢!

1 个答案:

答案 0 :(得分:5)

当然听起来像是抱怨你给它一个空的或空的userName。