繁体   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