...を使用してCassandraからデータを取得しようとしています.CassandralibCQL library in C++
で作成したテーブルは次のようなものです-
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 は、取得しようとしている実際のブロブ値です...
以下は、Cassandra からデータを取得しようとする C++ コードで、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
値は column_value である Cassandra テーブルのバイト配列 (バイナリ blob) であるため、値を出力する必要があります。
そして、キーと値の両方を文字列として宣言しましたが、これは上記のコードで推測する問題である可能性があります..バイト配列) 上記の C++ コードを使用していますか?
また、このバイナリ バイト配列 blob 値は任意の可変長にすることができ、常に BIG-ENDIAN バイト オーダー形式で格納されます。
Javaのバックグラウンドから来て、私は少し問題を抱えています...これについて何か助けていただければ幸いです...私が推測するように、バイナリバイト配列を表すためにどのデータ型を使用する必要があるかなど、完全にC++の質問です..