hbase 扫描器 .next() returns 空
hbase scanner .next() returns null
我正在 hbase 中扫描 md5 字符串,如果找到字符串,我必须执行一些操作。
问题是,如果我第一次检查它,它 returns 为真(并且 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"..但是scanner不是null(在db中是md5字符串), 所以它应该得到 "true"..
我现在能想到的最佳原因是只找到了 1 个与您的查询相符的结果。错误是在你身边调用 next()
的误解:调用 returns 下一个值(如果存在)并向前移动一步,没有办法去 返回.
通过调用 if (scannerCookiesData.next() != null)
,您实际上检索了该结果,并跳至下一个(如果存在)。
这意味着您实际上从未使用过您的第一个结果,除了 null 检查,因为它没有存储在任何地方。当您到达 for
循环时,您将开始使用第二个结果,我认为这在您的情况下不存在。
当没有找到扫描仪的进一步结果时,将返回 null
而不是 Result
对象,表示结果集结束。
我正在 hbase 中扫描 md5 字符串,如果找到字符串,我必须执行一些操作。 问题是,如果我第一次检查它,它 returns 为真(并且 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"..但是scanner不是null(在db中是md5字符串), 所以它应该得到 "true"..
我现在能想到的最佳原因是只找到了 1 个与您的查询相符的结果。错误是在你身边调用 next()
的误解:调用 returns 下一个值(如果存在)并向前移动一步,没有办法去 返回.
通过调用 if (scannerCookiesData.next() != null)
,您实际上检索了该结果,并跳至下一个(如果存在)。
这意味着您实际上从未使用过您的第一个结果,除了 null 检查,因为它没有存储在任何地方。当您到达 for
循环时,您将开始使用第二个结果,我认为这在您的情况下不存在。
当没有找到扫描仪的进一步结果时,将返回 null
而不是 Result
对象,表示结果集结束。