[英]Insert BLOB in Derby Database using SQL
目前,我正在嘗試使用Eclipse的數據工具SQL暫存器從Postgres數據庫將SQL-INSERT轉儲導入我的Derby開發/測試數據庫。 導出創建了大量數據,如下所示:
CREATE TABLE mytable ( testfield BLOB );
INSERT INTO mytable ( testfield ) VALUES ('\x0123456789ABCDEF');
在Eclispe的SQL Scratchpad中執行它會導致(從德語翻譯):
Columns of type 'BLOB' shall not contain values of type 'CHAR'.
問題似乎出在PostgreSQL管理工具以'\\x0123456789ABCDEF'
類的格式導出了BLOB數據,而Derby(Embedded)無法識別該格式。
將其更改為X'0123456789ABCDEF'
或僅將其更改為'0123456789ABCDEF'
也不起作用。
唯一有效的方法是CAST (X'123456789ABCDEF' AS BLOB)
,但我不確定,如果用Java讀回時這是否導致正確的二進制數據,以及X'0123456789ABCDEF'
是否100%可移植。
CAST(...無論如何... AS BLOB)在Java DB / Apache DERBY中不起作用!
必須使用內置系統過程 SYSCS_UTIL.SYSCS_IMPORT_DATA_LOBS_FROM_EXTFILE 。 我認為沒有其他辦法。 例如:
CALL SYSCS_UTIL.SYSCS_IMPORT_DATA_LOBS_FROM_EXTFILE (
'MYSCHEMA', 'MYTABLE',
'MY_KEY, MY_VARCHAR, MY_INT, MY_BLOB_DATA',
'1,3,4,2',
'c:\tmp\import.txt', ',' , '"' , 'UTF-8',
0);
其中所引用的“ import.txt”文件將是CSV之類的CSV文件(如上面的','和'“'參數所指定),並包含第二個字段(我為說明目的,對CSV字段順序與DB列名稱順序進行了加擾)包含適合BLOB的二進制數據的文件名,例如,“ import.txt”類似於:
“ A001”,“ c:\\ tmp \\ blobimport.dat.0.55 /”,“測試”,123
提供的BLOB數據文件名遵循約定“ filepath.offset.length / ”
實際上,您可以先使用
CALL SYSCS_UTIL.SYSCS_EXPORT_TABLE_LOBS_TO_EXTFILE(
'MYSCHEMA', 'MYTABLE', 'c:\tmp\export.txt', ',' ,'"',
'UTF-8', 'c:\tmp\blobexport.dat');
生成示例文件,其語法可在導入時重用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.