我已经开始使用C++ libcql
Cassandra 库了。我正在尝试使用 C++ 和 libcql 库从 Cassandra 检索数据。
每当我使用命令行cqlsh
并像这样选择时-
select record_name, record_value from profile_user where user_id = '1';
我总是在 cql 命令行上得到以下输出,其中record_name
和 record_value 实际上是TEXT datatype which is UTF-8 encoded string
.
record_name | record_value
-------------+--------------
e1 | hello
e2 | hello
现在来到 C++ 世界-
现在我正在尝试从...中检索相同的内容C++ libcql library
...我将在 C++ 中运行与上面相同的选择查询,并且我想返回一个映射,它将具有e1, e2 as the key
和HELLO as there value inside that map
...可以在 C++ 中执行吗?
/**
* This method will retrieve the data from Cassandra..
* And then call print_rows method to print it out on the console
*/
void get_attributes(string id){
try{
// some code
//Connection open
connection_open();
execute_query("USE testks;");
//this will give me the result back of the select query
cql_result_t& result = execute_query("select * from profile_user where key ='"+id+"';");
// and this is printing it out on the console
print_rows(result);
// some code
} catch (int e){
// some code here
}
}
以下是运行我的 C++ 程序后将在控制台上打印结果的方法 -
/**
* This method prints out the result on the console.. *
*
*/
void print_rows(cql::cql_result_t& result) {
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);
std::cout.write(reinterpret_cast<char*>(data), size);
std::cout << " | ";
}
std::cout << std::endl;
}
}
运行上面的 C++ 程序后,我在控制台上看到的结果是这样的 -
e1 | hello |
e2 | hello |
但我正在寻找的是 -将结果存储在 C++ 中的 Map 中,这样键应该e1 and e2
在 Map 中......并且它们的值应该HELLO
在同一个 Map 中......然后迭代 Map并用 C++ 打印出结果?这可能与我拥有的当前代码有关吗?
如果是,任何人都可以提供一个简单的例子吗?谢谢...
我猜这基本上是一个 C++ 问题。只需检索数据并将其放入地图中...但我面临的问题是我的背景完全是 Java,所以很难弄清楚如何做到这一点。 ..
我在这个问题中稍微改变了我的表格设计,而不是使用集合,而不是使用集合,现在我使用复合键..
但是,如果我能找出我之前问题的解决方案,那么我将采用这种方法,否则我将采用这种方法..
谢谢您的帮助...
更新代码:-
通过以下更改,它总是打印两次第一个结果?不知道为什么?
void print_rows(cql::cql_result_t& result){
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);
// std::cout.write(reinterpret_cast<char*>(data), size);
// std::cout << " | ";
if(!flag) {
key = reinterpret_cast<char*>(data);
flag = true;
} else if(flag) {
value = reinterpret_cast<char*>(data);
m[key] = value;
flag = false;
}
}
std:map<std::string, std::string>::const_iterator it = m.begin();
for (;it!=m.end(); ++it ) {
std::cout << it->first << " : " << it->second << std::endl;
}
std::cout << std::endl;
}
}
e1 : hello
e1 : hello
e2 : hello
我在这里做错了什么吗?