2015-04-27 116 views
1

我有包含bytea列的PostgreSQL表。例如: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]的一個字節[]。

因此,當我在我的WHERE子句中使用[65 66 67]進行查詢時,該行永遠找不到。

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

是否在PreparedStatement變化setBytes我傳遞中的字節?這似乎是錯誤的。我做錯了什麼嗎?

回答

1

當我看在數據庫中的插入值,則:\ x414243其中,我假設,等效於一個字節[的[41 42 43]

]這將是有缺陷的假設。 \x表示數據以十六進制格式顯示。因此\x414243相當於[ 0x41, 0x42, 0x43 ]byte[]。在十進制中,即[ 65, 66, 67 ],並且在任何基礎中,這些是「A」,「B」和「C」的ASCII碼。您的數據被正確存儲。您對它的查詢不正確。

相關問題