我正在尝试使用libCQL library in C++
... 从 Cassandra 检索数据。我在 Cassandra 中创建的表是这样的 -
create table test_cql (user_id text, column_name text, column_value blob, primary key (id, column_name));
以下是上表中的数据 -
cqlsh:testks> select column_name, column_value from test_cql where user_id = '1';
column_name | column_value
--------------------------+--------------------------------------------------------------------------------------------
@hello.1381780131229.dc1 | 0x7fff0000012c4ebb95550000001e42797465204172726179205465737420466f722042696720456e6469616e
这里 column_value 是我要检索的实际 blob 值...
现在下面是我拥有的 C++ 代码,它将尝试从 Cassandra 检索数据user_id = 1
,我试图在其中打印出 column_name 和 column_value 详细信息。
bool flag = false;
std::map<std::string, std::string> m;
std::string key, value;
string query = "select column_name, column_value from test_cql where user_id ='1';";
std::cout << query << endl;
// the below line will execute the query
cql_result_t& result = execute_query(query);
// this will print out the result after executing the above query
while (result.next()) {
for (size_t i = 0; i < result.column_count(); ++i) {
cql::cql_byte_t* data = NULL;
cql::cql_int_t size = 0;
result.get_data(i, &data, size);
if (!flag) {
key = reinterpret_cast<char*>(data);
flag = true;
} else if (flag) {
value = reinterpret_cast<char*>(data);
m[key] = value;
flag = false;
}
}
cout<<key << "-" << value <<endl;
}
上面的代码仅以@hello.1381780131229.dc1
某种方式打印出键而不是值。它应该打印出值,0x7fff0000012c4ebb95550000001e42797465204172726179205465737420466f722042696720456e6469616e
因为该值是 Cassandra 表中的字节数组(二进制 blob),即 column_value。
我已经将键和值都声明为字符串,这可能是我在上面的代码中猜测的问题。但我相信值是 Cassandra 表中的实际 blob(column_value)。所以我不确定如何检索二进制 blob(字节数组)使用上面的 C++ 代码?
而且这个二进制字节数组 blob 值可以是任何可变长度,并且始终以 BIG-ENDIAN 字节顺序格式存储。
来自Java背景,我有一点问题......任何帮助将不胜感激......我猜,它完全是C ++问题,比如我应该使用哪种数据类型来表示二进制字节数组......