目前我正在尝试使用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%便携式的话
答案 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');
生成示例文件,其语法在导入时重用。