簡體   English   中英

如何使用插入查詢將二進制數據插入到 Postgresql 使用 jdbc

[英]How to Insert binary data with in insert query into Postgresql using jdbc

我有如下表結構

CREATE  TABLE PUBLIC.STAFF(
    STAFF_ID INT NOT NULL,
    FIRST_NAME VARCHAR(45) NOT NULL,
    LAST_NAME VARCHAR(45) NOT NULL,
    ADDRESS_ID SMALLINT NOT NULL,
    PICTURE BYTEA,
    EMAIL VARCHAR(50),
    STORE_ID INT NOT NULL,
    ACTIVE BOOLEAN NOT NULL,
    USERNAME VARCHAR(16) NOT NULL,
    PASSWORD VARCHAR(40),
    LAST_UPDATE TIMESTAMP NOT NULL
); 

我在腳本文件中有幾個插入查詢或存儲在 arraylist 中

INSERT INTO STAFF(STAFF_ID, FIRST_NAME, LAST_NAME, ADDRESS_ID, PICTURE, EMAIL, STORE_ID, ACTIVE, USERNAME, PASSWORD, LAST_UPDATE)
VALUES (
    1,
    'Mike',
    'Hillyer',
    3,
    X'89504e470d0a1a0a0000000d4948445200000079000000750802000000e55ad965000000097048597300000ec300000ec301c76fa8640000200049444154789c4cbb7794246779ffbbf78f7b7ebe466177677772ce3d9d667aa67ba62776ce39545557ce3974ee9eb049ab95563922104142580830d10203061bb049064cb031d916c160100284505aedee4cdd3f16b8b7ce73de53f5d61f75cee7bcf53ccff7fb561dbb7ce9ad972fbdf5aecb6fbd74e7a3b75f7ef4ce7bde72e9ae375fbaffcd676ebff7e29d658c864812c0e90acec0040d123aad8a284f950906205810672b140d900226b218c713028f0a5c8',
    'Mike.Hillyer@sakilastaff.com',
    1,
    TRUE,
    'Mike',
    '8cb2237d0679ca88db6464eac60da96345513964',
    TIMESTAMP '2006-02-15 04:57:16.0'
); 

當我嘗試使用 JDBC 程序將數據插入 postgres 時,出現以下錯誤:

ERROR:  column "picture" is of type bytea but expression is of type bit
LINE 2: (1, 'Mike', 'Hillyer', 3, X'89504e470d0a1a0a0000000d49484452..                                 
HINT:  You will need to rewrite or cast the expression.
********** Error **********

ERROR: column "picture" is of type bytea but expression is of type bit

如何使用Java解決此問題?

嘗試這個:

E'\\x89504e470d0a1a0a0000000d4948445200000079000000750802000000e55ad965000000097048597300000ec300000ec301c76fa8640000200049444154789c4cbb7794246779ffbbf78f7b7ebe466177677772ce3d9d667aa67ba62776ce39545557ce3974ee9eb049ab95563922104142580830d10203061bb049064cb031d916c160100284505aedee4cdd3f16b8b7ce73de53f5d61f75cee7bcf53ccff7fb561dbb7ce9ad972fbdf5aecb6fbd74e7a3b75f7ef4ce7bde72e9ae375fbaffcd676ebff7e29d658c864812c0e90acec0040d123aad8a284f950906205810672b140d900226b218c713028f0a5c8'

是的,在訪問表單 java 時,建議使用准備好的語句。 可以在此處找到示例。

但有時您需要在 SQL 中進行。在這種情況下應使用略有不同的表示法。 只需在字符串的開頭使用 \x ,如下所示(不需要任何特殊前綴,但請注意 x 是小寫的):

'\x89504e470d0a1a0a0000000d4948445200000079000000750802000000e55ad965000000097048597300000ec300000ec301c76fa8640000200049444154789c4cbb7794246779ffbbf78f7b7ebe466177677772ce3d9d667aa67ba62776ce39545557ce3974ee9eb049ab95563922104142580830d10203061bb049064cb031d916c160100284505aedee4cdd3f16b8b7ce73de53f5d61f75cee7bcf53ccff7fb561dbb7ce9ad972fbdf5aecb6fbd74e7a3b75f7ef4ce7bde72e9ae375fbaffcd676ebff7e29d658c864812c0e90acec0040d123aad8a284f950906205810672b140d900226b218c713028f0a5c8'

請注意,舊版本的 PostgreSQL 僅支持使用八進制形式編碼任意字節而非十六進制的轉義格式。 另請注意,轉義格式需要 ::bytea 結尾。

可以在此處找到詳細信息(將 url 中的版本替換為您正在使用的版本)。

PS 顯然對於原始問題來說太晚了,但這是在線搜索的地方。 所以,記錄在這里。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM