内容简介:翻译自:https://stackoverflow.com/questions/26682873/responseerror-expected-4-or-0-byte-int
我正在尝试cassandra节点驱动程序并在插入记录时陷入问题,它看起来像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) );
P.S
在尝试理解问题时的一些观察:
>因为看起来问题是浮点数所以我将类型float(locX,locY)更改为int并重新运行代码.同样的错误仍然存在.因此,它不是浮动CQL类型特别相关的问题.
>接下来,我尝试从INSERT查询中删除所有int,并尝试仅插入非数字值.此尝试成功将值输入db.因此,现在看来,这个问题可能与数字类型有关.
中选取的
在对数据进行编码时,在使用参数的正常执行时,驱动程序会尝试根据输入类型猜测目标类型. Number类型的值将被编码为double(因为Number是double / IEEE 754值).
请考虑以下示例:
var key = 1000; client.execute('SELECT * FROM table1 where key = ?', [key], callback);
如果键列的类型为int,则执行失败.有两种方法可以避免此类问题:
>准备数据(推荐) – 在执行前准备查询
client.execute(‘SELECT * FROM table1 where key =?’,[key],{prepare:true},callback);
>提示目标类型 – 提示:第一个参数是整数
client.execute(‘SELECT * FROM table1 where key =?’,[key],{hints:[‘int’]},callback);
如果您正在处理批量更新,那么 this issue 可能是您感兴趣的.
翻译自:https://stackoverflow.com/questions/26682873/responseerror-expected-4-or-0-byte-int
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- [译] 处理 JavaScript 中的非预期数据
- [译] 处理 JavaScript 中的非预期数据
- 用模糊测试对抗预期输入(半机翻有删增)
- 自然常数e与Filecoin预期共识有什么关系?
- [译] Offer 薪资不如预期?你或许需要薪酬谈判服务
- 韦乐平:NFV进展不及预期 网络将从“随选”迈向“随愿”
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。