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

发布于 2024-12-09 01:09:51 字数 1384 浏览 0 评论 0原文

我将用户名和密码作为以 userName 键控的 ColumnFamily 的列。

使用比较器 = UTF8Type 创建列族 TestUserInfo column_metadata = [{column_name:用户名,validation_class:UTF8Type}, {列名:密码,验证类:UTF8Type}];

当数据库中存在密钥时,以下代码可以正常工作。而当密钥不存在时,会抛出 me.prettyprint.hector.api.exceptions.HInvalidRequestException: InvalidRequestException(why:Key may not be empty)

    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();
    }

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

谢谢!

I have username and password as the columns of a ColumnFamily keyed with userName.

create column family TestUserInfo with comparator = UTF8Type with
column_metadata = [{column_name: username, validation_class:UTF8Type},
{column_name: password, validation_class:UTF8Type} ];

The following code works fine when the key is present in the db. Whereas throws me.prettyprint.hector.api.exceptions.HInvalidRequestException: InvalidRequestException(why:Key may not be empty) when the key is not present.

    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();
    }

Can you ppl tell me where I am going wrong? Or is this the expected behaviour? If so then how can i check for empty results? Say I am checking login information from db. Then if the userName(Key) is not in db then i need to get an empty result right?

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

夜血缘 2024-12-16 01:09:51

当然,在我看来,它好像在抱怨你给了它一个空的或空的用户名。

Sure sounds to me like it's complaining that you're giving it an empty or null userName.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文