gpt4 book ai didi

java - PostgreSQL JDBC PreparedStatement的setBytes改变参数值

转载 作者:行者123 更新时间:2023-11-29 13:28:07 26 4
gpt4 key购买 nike

我有一个包含 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 的 byte[] 时,它是:[65 66 67]。但是,当我查看数据库中插入的值时,它是:\x414243,我认为它等同于 [41 42 43] 的 byte[]。

因此,当我在 WHERE 子句中使用 [65 66 67] 进行查询时,从未找到该行。

select * from my_table where bytes_col = E'\\x656667';

PreparedStatement 中的setBytes 是否会更改我传入的字节?这似乎是错误的。我做错了什么吗?

最佳答案

when I look at the inserted value in the database it is: \x414243 which, I assume, is equivalent to a byte[] of [41 42 43]

那将是一个错误的假设。 \x 表示数据以十六进制格式显示。因此 \x414243 等同于 [ 0x41, 0x42, 0x43 ]byte[]。在十进制中,它是 [ 65, 66, 67 ],在任何基数中,它们都是“A”、“B”和“C”的 ASCII 代码。您的数据已正确存储。您的查询不正确。

关于java - PostgreSQL JDBC PreparedStatement的setBytes改变参数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29885400/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com