【发布时间】:2015-04-27 00:40:09
【问题描述】:
我有一个包含 bytea 列的 PostgreSQL 表。例如:
CREATE TABLE my_table (
text_col text NOT NULL,
bytea_col bytea NOT NULL
);
插入到表中使用PreparedStatement 类似这样的东西:
...
byte[] value = "ABC".getBytes();
String insertStmt = "INSERT INTO my_table (text_col, bytea_col) VALUES (?, ?)";
PreparedStatement ps = conn.prepareStatement(insertStmt);
ps.setString(1, "SomeString");
ps.setBytes(2, value);
...
当字符串ABC 的字节[] 被打印出来时,它是:[65 66 67]。
但是,当我查看数据库中插入的值时,它是:\x414243,我认为它相当于[41 42 43] 的一个字节[]。
因此,当我在 WHERE 子句中使用 [65 66 67] 进行查询时,永远找不到该行。
select * from my_table where bytes_col = E'\\x656667';
PreparedStatement 中的 setBytes 是否会更改我传入的字节?这似乎是错误的。我做错了什么吗?
【问题讨论】:
标签: java postgresql jdbc prepared-statement