如何在postgresql jdbc预处理语句中编写BYTEA

时间:2016-02-13 17:26:21

标签: java postgresql jdbc postgresql-9.5

我试图将一个字节流写入我的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方面的一个错误,但我还没有用尽我的积极性。

0 个答案:

没有答案