我试图将一个字节流写入我的postgres服务器(PostgreSQL 9.5beta2,Windows 8 64bit)。
插入查询如下:
PreparedStatement insert = Database.prepare("INSERT INTO hierarchical_correlation (reference, target, values) VALUES (?,?,?::BYTEA) ON CONFLICT (reference, target) DO UPDATE SET values = EXCLUDED.values")
hierarhical_correlation的schmea是
CREATE TABLE public.hierarchical_correlation (
reference HANDLE NOT NULL,
target HANDLE NOT NULL,
values BYTEA,
PRIMARY KEY (reference, target)
);
我正在插入这样的值:
final byte[] score = new byte[]{127,-128,127}; // These are exemplary values, but I have checked and my values are always in that range.
final String reference = scapeplot.reference.hash;
final String target = scapeplot.resolve(0).get().hash;
insert.setString(1, reference);
insert.setString(2, target);
insert.setBinaryStream(3, new ByteArrayInputStream(score));
insert.setBytes(3, score); // I have tried both
由于Java中的字节范围是-128到127,并且据我所知postgres有0-255我希望-128为0,127为128到255.当我评估上述内容时,检查它的值我得到的东西(那些显然不是等价的字节,但下面的字符串生成的值在128或-127之间)
'7F807F80807F8080808080808080808080'
这显然是正确的,但是完全错误:0x7F是127,这是正确的,没有JDBC的重新定义而0x80是128,这显然是错误的,但鉴于它产生和溢出,我们是正确的值
那我该如何插入这些值呢?我试过改变,这两个值都没有产生我想要的结果。
bytea_output = 'escape' # hex, escape
我实际上怀疑它是JDBC方面的一个错误,但我还没有用尽我的积极性。