我在Cassandra Datastax C++驱动程序中使用预处理语句.如何将整数值绑定到"USING TTL?" 准备好的声明的一部分?
我的陈述是这样的
INSERT INTO table (column1, column2, column3) VALUES (?, ?, ?) USING TTL ?
Run Code Online (Sandbox Code Playgroud)
换句话说,如果我使用该位置绑定到TTL,它的位置是什么?(在这个例子中,它是4吗?)如果我按列名使用bind,它的列名是什么?
看起来这可以在CQL中完成,但我找不到任何关于C++驱动程序API的文档来执行此操作.
在Cassandra CQL 2.0中,您可以:
Cassandra 1.2不允许您对update语句的TIMESTAMP和TTL属性或SELECT语句的LIMIT属性使用绑定标记。现在,此问题已修复,您可以例如准备以下语句:
SELECT * FROM myTable LIMIT ?;
UPDATE myTable USING TTL ? SET v = 2 WHERE k = 'foo';
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请参见他们的博客。
编辑:
我发现此pdf文件,它告诉您更多信息:
绑定参数:
驱动程序支持两种绑定参数:按标记和按名称。绑定参数 标记用于表示查询字符串中的绑定变量。这用于常规查询和预准备的参数化查询。除了在查询字符串中添加绑定标记之外,您的应用程序还必须在构造新语句时向cass_statement_new()提供绑定变量的数量。如果查询不需要任何绑定变量,则可以使用0。然后,使用cass_statement_bind _ *()函数将值绑定到语句的变量。绑定变量可以由标记索引或名称绑定。
按标记索引绑定示例
CassString query = cass_string_init("SELECT * FROM table1 WHERE column1
= ?");
/* Create a statement with a single parameter */
CassStatement* statement = cass_statement_new(query, 1);
cass_statement_bind_string(statement, 0, cass_string_init("abc"));
/* Execute statement */
cass_statement_free(statement);
Run Code Online (Sandbox Code Playgroud)
按标记名称示例绑定
对于准备好的语句,变量只能按名称绑定。存在此限制是因为需要Cassandra提供的查询元数据才能将变量名称映射到变量的标记索引。
/* Prepare statement */
/* The prepared query allocates the correct number of parameters
automatically */
CassStatement* statement = cass_prepared_bind(prepared);
/* The parameter can now be bound by name */
cass_statement_bind_string_by_name(statement, "column1",
cass_string_init("abc"));
/* Execute statement */
cass_statement_free(statement);
Run Code Online (Sandbox Code Playgroud)
要回答您的问题,您可以使用按索引绑定(至少可以肯定地起作用):
CassString query = cass_string_init("INSERT INTO table (column1, column2, column3) VALUES (?, ?, ?) USING TTL ?");
/* Create a statement with a single parameter */
CassStatement* statement = cass_statement_new(query, 4); // Bind 4 variables.
cass_statement_bind_string(statement, 0, cass_string_init("abc")); // Bind abc to first column.
cass_statement_bind_string(statement, 1, cass_string_init("bcd")); // Bind bcd to second column.
cass_statement_bind_string(statement, 2, cass_string_init("cde")); // Bind cde to third column.
cass_statement_bind_string(statement, 3, cass_string_init(50)); // Bind 50 to TTL.
/* Execute statement */
cass_statement_free(statement);
Run Code Online (Sandbox Code Playgroud)
编辑:
请参阅https://docs.datastax.com/zh-CN/cql/3.3/cql/cql_using/useExpireExample.html,您会发现在进行INSERT的情况下,我们将TTL用作查询的最后一部分,如上所示。
| 归档时间: |
|
| 查看次数: |
466 次 |
| 最近记录: |