使用SQL在Derby数据库中插入BLOB

时间:2016-12-15 13:34:00

标签: java sql jdbc blob derby

目前我正在尝试使用Eclipse的数据工具SQL暂存器将一个SQL-INSERT转储从postgres数据库导入到我的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(嵌入式)无法识别。

将此更改为X'0123456789ABCDEF'或简称'0123456789ABCDEF'也无效。

唯一可行的是CAST (X'123456789ABCDEF' AS BLOB),但我还不确定,如果在Java中回读时导致正确的二进制数据,并且X'0123456789ABCDEF'是100%便携式的话

1 个答案:

答案 0 :(得分:0)

CAST(......无论如何...... AS BLOB)在java DB / Apache DERBY中不起作用!

必须使用built-in system procedure 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字段顺序与DB列进行了加扰名称的目的是为了说明一个文件名,其中包含适用于BLOB的二进制数据。例如," import.txt"就像:

" A001"" C:\ TMP \ blobimport.dat.0.55 /"" TEST",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'); 

生成示例文件,其语法在导入时重用。