hbase scanner .next()返回null

时间:2015-10-23 08:08:38

标签: java servlets if-statement for-loop hbase

我正在扫描hbase中的md5字符串,如果找到了字符串,我必须执行一些操作。 问题是,如果我第一次检查它,它返回true(并且log是值),但是,当我在if或for语句中使用相同的表达式时,我得到了错误的结果。

        Scan scanCookiesData = new Scan();

        scanCookiesData.addColumn(Bytes.toBytes("md5data"), Bytes.toBytes("md5data"));
        ResultScanner scannerCookiesData = dbHelper.getTable("userInfo").getScanner(scanCookiesData);
            if (scannerCookiesData.next() != null) {
            response.getWriter().println("if (scannerCookiesData.next() != null)");

            for (Result r = scannerCookiesData.next(); r != null; r = scannerCookiesData.next()) {
                response.getWriter().println("INSIDE FOR!!!");

                if (md5data.equals(Bytes.toString(r.value()))) {
                    // Here we will assign ID to the user.
                    response.getWriter().println(assignID(Bytes.toString(r.value())));
                    response.setStatus(200);
                } else {
                    response.getWriter().println("ELSE");
                }
            }
        } else {
            response.getWriter().println(createNewUser(json));
            response.setStatus(200);
        }

在这段代码中,首先如果它变为“true”,但in for未被调用,因为它将显示“false”..但是scan不是null(在db中是md5字符串),所以应该得到“真实”..

1 个答案:

答案 0 :(得分:1)

我现在能够想到的最好的原因是您的查询只找到了1个结果。错误就是因为误解了你身边的next():该调用会返回下一个值(如果存在)并向前移动一步,无法返回返回

通过调用if (scannerCookiesData.next() != null),您实际检索到该结果,然后跳到下一个(如果存在)。 这意味着您从未实际使用过您的第一个结果,除了空检查,因为它无处存储。到达for循环时,您将开始使用第二个结果,我认为在您的情况下不存在。

如果没有找到扫描程序的进一步结果,将返回null而不是Result对象,表示结果集的结束。