У меня есть таблица PostgreSQL, содержащая столбец bytea
. Например:PostgreSQL JDBC PreparedStatement setBytes изменяет значение параметра
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]
.
Поэтому, когда я делаю запрос с использованием [65 66 67]
в предложении WHERE, строка никогда не будет найдена.
select * from my_table where bytes_col = E'\\x656667';
Имеет ли setBytes
в PreparedStatement
изменениях байт, которые Переходят в? Это кажется неправильным. Я что-то делаю неправильно?