gpt4 book ai didi

c++ - 使用 CQL 准备的查询在 C++ 中管理计数器

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:59:47 25 4
gpt4 key购买 nike

重新发布实际代码

    // cassandra is a connected org::apache::cassandra::CassandraClient
// statement is a CqlPreparedResult
// result is a CqlResult
// CF declaration is:
/*
CREATE COLUMNFAMILY xp (
cid ascii PRIMARY KEY,
exp4 counter,
exp2 counter,
exp3 counter,
exp1 counter
) WITH
comment='' AND
comparator=text AND
read_repair_chance=0.100000 AND
gc_grace_seconds=864000 AND
default_validation=counter AND
min_compaction_threshold=4 AND
max_compaction_threshold=32 AND
replicate_on_write=True AND
compaction_strategy_class='SizeTieredCompactionStrategy' AND
compression_parameters:sstable_compression='org.apache.cassandra.io.compress.SnappyCompressor';
*/
std::vector<std::string> values;
values.resize(2);
values[0]="1";
values[1]="103";
cassandra->prepare_cql_query(statement,"update xp set exp2 = exp2 + ? where cid=?",Compression::NONE);
int32_t handle=statement.itemId;
try {
cassandra->execute_prepared_cql_query(result,handle,values);
}
catch(InvalidRequestException &e) {
cout << __LINE__ << " " << e.why << " "<< e.what() << endl;
}
// throws '?' is an invalid value, should be a long.
values.resize(1);
values[0]="103";
cassandra->prepare_cql_query(statement,"update xp set exp2 = exp2 + 1 where cid=?",Compression::NONE);
handle=statement.itemId;
cassandra->execute_prepared_cql_query(result,handle,values);
//works

看起来问题在于我们无法传递二进制数据。我试图传入一个包含 long 的实际表示的字符串,但没有成功。当我从中读取数据时出现同样的问题,但我认为我可以管理它(扫描返回的字符串并将其一次转换一个字节作为最后的手段)

有没有人成功使用过计数器、c++ 和 cql?

最佳答案

long 值应编码为 big-endian 64 位整数。所以尝试:

values[0] = "\0\0\0\0\0\0\0\x64";

如果您打算在没有驱动程序的情况下继续使用 CQL,您将需要大量的编码/解码例程来处理这类事情。

关于c++ - 使用 CQL 准备的查询在 C++ 中管理计数器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10609272/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com