1

我使用这个驱动程序作为 cassandra 和我的节点 js 应用程序之间的桥梁。到目前为止,一切似乎都运行良好,除了以下问题:

问题 我有一个 varchar 类型的列,当我插入一个包含破折号 (-) 的字符串时,cassandra 会抛出错误String didn't validate.

我正在使用批处理语句,如下所示

var queryset_insert_user = {
    query: query_insert_user,
    params: query_insert_user_params,
    hints:[ dataTypes.varchar, dataTypes.varchar, dataTypes.varchar, dataTypes.varchar,
    dataTypes.varchar, dataTypes.varchar, dataTypes.varchar]
}

varchar 在哪里

var dataTypes = {};
dataTypes.varchar = 0x000d;  //couldn't find how to get this from API itself so just copied value from types.js of cassandra driver.

批处理语句是

var batchQueries = [queryset_insert_iidMetadata, queryset_insert_user];
client.batch(batchQueries,__queryOptions(), function(err, result){
       // getting err here...
});

输入参数为:

query2 params are = ["4fde84c173232d25641db25ba1b0","+0012255446633",["1415957771074"],"CGFnzVSuGwkOrVI","NEW","+001","53a985bd-bc28-3768-a1ea-e366409cb996"]

注意 当我看到这个问题时,我试图使用提示。

如何解决这个错误

4

2 回答 2

3

添加 option 后prepare: true,包含 dash 的字符串可以正常插入到 cassandra 中。

这是来自 cassandra 节点驱动程序仓库的代码:

// Use query markers (?) and parameters
const query = 'UPDATE users SET birth = ? WHERE key=?'; 
const params = [ new Date(1942, 10, 1), 'jimi-hendrix' ];
// Set the prepare flag in the query options
client.execute(query, params, { prepare: true })
  .then(result => console.log('Row updated on the cluster'));
于 2019-01-02T13:07:53.683 回答
2

在 Cassandra 的 DataStax Node.js 驱动程序中,参数提示在查询选项中传递:

// Queries with the parameters
const queries = [ queryset_insert_iidMetadata, queryset_insert_user ];
// Parameter hints are passed with the rest of the queryOptions
client.batch(queries, {hints: [hintForIidMeta, hintForUser]}, callback);

在任何情况下,推荐的方法是使用prepared statements,这样参数映射将是准确的:

await client.batch(queries, { prepare: true })
console.log('Data updated on cluster');
于 2014-11-17T10:02:50.773 回答