这里Riak开发相对较新。我正在使用c ++客户端连接到Riak java客户端,而Riak java客户端又连接到Riak集群。 c ++客户端使用Google协议缓冲区以“GET”的形式将查询序列化为字符串:KEY和Riak java客户端将响应序列化为“OK”:VALUE。如何正确处理未找到数据库值的情况?
这是来自Riak java客户端的示例代码,用于从db:
中检索对象String key //Contains the actual key
Namespace ns;
byte[] retVal = null;
Location location = new Location(ns, key);
try {
FetchValue fv;
FetchValue.Response response = client.execute(fv);
if (response.isNotFound()) {
System.out.println("The key/value pair was not found");
} else {
RiakObject obj = response.getValue(RiakObject.class);
retVal = obj.getValue().getValue();
}
}
catch (...) {...}
return retVal;
}
如果未找到该对象,则byte []数组保持为NULL
这是来自Riak java客户端的示例代码,用于序列化回复:
ByteString valueBuf = ByteString.copyFrom(value);
// Generate reply message
reply = Request.RequestMessage.newBuilder().setCommand("OK").setValue(valueBuf).build().toByteArray();
但是代码在copyFrom行抛出NullPointerException,因为它尝试从Null数组复制。有没有办法更干净地做到这一点?
谢谢!
答案 0 :(得分:1)
在尝试value == null
来电之前,您应该先查看是否copyFrom()
。
此外,您应该考虑使用Go的能力从C(cgo
)而不是Java客户端进行集成。我整理了一个very, very basic demonstration here。