嗨我在cassandra db中有一个专栏家庭,当我检查表的内容时,它用作
时显示不同./cqlsh -2
select * from table1;
KEY,31281881-1bef-447a-88cf-a227dae821d6 | A,0xaa| Cidr,10.10.12.0/24 | B,0xac | C,0x01 | Ip,10.10.12.1 | D,0x00000000 | E,0xace | F,0x00000000 | G,0x7375626e657431 | H,0x666230363 | I,0x00 | J,0x353839
输出与
的输出相同./cqlsh -3
select * from table1;
key | Cidr | Ip
--------------------------------------+---------------+------------
31281881-1bef-447a-88cf-a227dae821d6 | 10.10.12.0/24 | 10.10.12.1
使用java程序运行插入此值。
我想假设只在数据库中手动使用-2选项时看到的库“B”的更新值,它给出了它是十六进制值的错误。 我正在使用此命令进行更新但始终收到错误
cqlsh:sdnctl_db>更新表1 SET B ='0x7375626e657431'其中key ='31281881-1bef-447a-88cf-a227dae821d6';
错误请求:无法将“0x7375626e657431”解析为十六进制字节
cqlsh:sdnctl_db>更新表1 SET B = 0x7375626e657431其中key ='31281881-1bef-447a-88cf-a227dae821d6';
错误请求:第1:30行输入'x7375626e657431'
没有可行的选择cqlsh:sdnctl_db>更新表1 SET B = 7375626e657431其中key ='31281881-1bef-447a-88cf-a227dae821d6';
错误请求:第1:37行不匹配的字符'6'期待' - '
我需要插入仅由应用程序挑选但不能插入的十六进制值。
请帮助我纠正语法。
答案 0 :(得分:0)
这取决于列B具有的数据类型。 Here is the reference of the CQL data types.文档说明blob
数据表示为十六进制字符串,因此我的假设是您的列B也是blob
。从this other cassandra question (and answer)开始,您将看到如何将字符串插入blob。
cqlsh:so> CREATE TABLE test (a blob, b int, PRIMARY KEY (b));
cqlsh:so> INSERT INTO test(a,b) VALUES (textAsBlob('a'), 0);
cqlsh:so> SELECT * FROM test;
b | a
---+------
0 | 0x61
cqlsh:so> UPDATE test SET a = textASBlob('b') WHERE b = 0;
cqlsh:so> SELECT * FROM test;
b | a
---+------
0 | 0x62
在您的情况下,您可以将十六进制字符串转换为代码中的char字符串,然后使用cqlsh的textAsBlob
函数。
如果B列的数据类型为int
,为什么在执行插入之前不将十六进制数转换为int?