簡體   English   中英

使用SQL在Derby數據庫中插入BLOB

[英]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.

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