ResponseError:期望4或0字节int

我正在尝试cassandra节点驱动程序,并插入一条logging卡在问题,它看起来像cassandra驱动程序无法插入浮点值。

Problem: When passing int value for insertion in db, api gives following error: Debug: hapi, internal, implementation, error ResponseError: Expected 4 or 0 byte int (8) at FrameReader.readError (/home/gaurav/Gaurav-Drive/code/nodejsWorkspace/cassandraTest/node_modules/cassandra-driver/lib/readers.js:291:13) at Parser.parseError (/home/gaurav/Gaurav-Drive/code/nodejsWorkspace/cassandraTest/node_modules/cassandra-driver/lib/streams.js:185:45) at Parser.parseBody (/home/gaurav/Gaurav-Drive/code/nodejsWorkspace/cassandraTest/node_modules/cassandra-driver/lib/streams.js:167:19) at Parser._transform (/home/gaurav/Gaurav-Drive/code/nodejsWorkspace/cassandraTest/node_modules/cassandra-driver/lib/streams.js:101:10) at Parser.Transform._read (_stream_transform.js:179:10) at Parser.Transform._write (_stream_transform.js:167:12) at doWrite (_stream_writable.js:225:10) at writeOrBuffer (_stream_writable.js:215:5) at Parser.Writable.write (_stream_writable.js:182:11) at write (_stream_readable.js:601:24) 

我试图从代码执行以下查询:

 INSERT INTO ragchews.user (uid ,iid ,jid ,jpass ,rateCount ,numOfratedUser ,hndl ,interests ,locX ,locY ,city ) VALUES ('uid_1',{'iid1'},'jid_1','pass_1',25, 10, {'NEX1231'}, {'MUSIC'}, 21.321, 43.235, 'delhi'); 

传递给execute()参数是

 var params = [uid, iid, jid, jpass, rateCount, numOfratedUser, hndl, interest, locx, locy, city]; 

哪里

 var locx = 32.09; var locy = 54.90; 

并调用执行如下所示:

 var addUserQuery = 'INSERT INTO ragchews.user (uid ,iid ,jid ,jpass ,rateCount ,numOfratedUser ,hndl ,interests ,locX ,locY ,city) VALUES (?,?,?,?,?,?,?,?,?,?,?);'; var addUser = function(user, cb){ console.log(user); client.execute(addUserQuery, user, function(err, result){ if(err){ throw err; } cb(result); }); }; CREATE TABLE ragchews.user( uid varchar, iid set<varchar>, jid varchar, jpass varchar, rateCount int, numOfratedUser int, hndl set<varchar>, interests set<varchar>, locX float, locY float, city varchar, favorite map<varchar, varchar>, PRIMARY KEY(uid) ); 

PS一些观察,而试图了解这个问题:

  1. 因为看起来,问题是浮动,所以我改变types浮动(的locX,locY)为int并重新运行代码。 同样的错误依然存在。 因此,浮动CQLtypes不是特别关联的问题。
  2. 接下来,我试图从INSERT查询中删除所有int,并试图只插入非数字值。 这个尝试成功地把值input到db中。 因此现在看来, this problem may be associated with numeric types

以下文字是从cassandra节点驱动程序数据types文档中挑选出来的

在对数据进行编码时,在正常执行参数的情况下,驱动程序会根据inputtypes尝试猜测目标types。 Numbertypes的值将被编码为double(Number是double / IEEE 754值)。

考虑下面的例子:

 var key = 1000; client.execute('SELECT * FROM table1 where key = ?', [key], callback); 

如果键列是inttypes,则执行失败。 有两种可能的方法来避免这种types的问题:

  1. 准备数据(推荐) – 在执行前准备查询

    client.execute('SELECT * FROM table1 where key = ?', [key], { prepare : true }, callback);

  2. 暗示目标types – 提示:第一个参数是一个整数

    client.execute('SELECT * FROM table1 where key = ?', [key], { hints : ['int'] }, callback);

如果你正在处理批量更新,那么这个问题可能是你的兴趣。