1

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

4

0 回答 0