我正在尝试将字节流写入我的 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 方面的错误,但我还没有耗尽我的积极性。