nodejs-cassandra不会插入整数

时间:2015-10-02 23:09:34

标签: node.js cassandra cassandra-cli

我已经尝试了很多东西来解决这个问题,但似乎总会导致一个或另一个错误。

下面是我用来执行INSERT查询的代码。

            req.client.execute("INSERT INTO users (id,username,email,password,userFolder) VALUES (now(),'"+newUser.username+"','"+newUser.email+"','"+newUser.password+"',"+newUser.userFolder+");",function(err,result){
            if(err){
                console.log(err.message)
            }else{
                console.log("New user created")
            }
        });

newUser.userFolder只是在数组中定义为new Date().getTime()

我尝试过parseInt(userFolder: new Date().getTime());,但似乎总是会导致此错误

此外,如果您尝试Number(userFolder :new Data().getTime());它也不起作用并导致下面的第二个错误;

我尝试的另一件事就是输入newUser.userFolder.valueOf(),这也会导致第二个错误。

Invalid STRING constant (1443827057269) for "userfolder" of type int

Unable to make int from '1443827264655'

我有一种感觉,因为'是在数字引起这种情况之前。但是我不知道如何删除它。

我尝试在不使用数组的情况下直接键入数字并且工作正常,因此变量必然会导致此问题。

我基本上从MySQL迁移到cassandra并且有一个这个项目的截止日期,所以任何帮助都会受到赞赏。

顺便说一下,我使用node-js的数据传输驱动程序

1 个答案:

答案 0 :(得分:2)

req.client.execute("INSERT INTO users (id,username,email,password,userFolder) VALUES (now(), :username, :email, :userFolder)", 
                   newUser, 
                   {prepare: true }, 
                   function(err,result) {
                       if(err){
                           console.log(err.message)
                       }else{
                           console.log("New user created")
                   }
    });

现在有点细节:

  1. 而不是通过连接值创建CQL字符串,上面的代码创建参数化查询
  2. 查询中的参数按名称(例如username)从newUser对象中检索。参数的名称必须与对象中属性的名称完全相同。

    有一个选项可以使用?代替位置参数,然后你可以在数组中传递它们的值:

    req.client.execute("INSERT INTO users (id,username,email,password,userFolder) VALUES (now(), ?, ?, ?)", 
               [newUser.username, newUser.password, newUser.userFolder], ...
    
  3. {prepare: true}告诉客户准备此语句,如果它多次使用,则会优化其执行和参数传输

  4. 最后但并非最不重要的是,请不要将密码存储清楚。