Derby以较小的块为Blob列解析图像十六进制

时间:2019-06-27 20:29:57

标签: java derby

我有一个Blob列来存储图像。我正在使用Java将数据库转储到SQL脚本中以用于测试目的。除了图像外,我什么都有。

我使用byte[]将Blob的输出设置为blobValue.getBytes(1L, blobValue.length()),然后使用此SO answer将其转换为十六进制字符串。然后,我使用了DERBY-2198注释中推荐的内容,将SQL脚本中的十六进制转换为blob:

CAST(X'<HEX STRING>' AS BLOB)

我认为这将会奏效,但是如果没有,那么我欢迎一个更好的解决方案。

按现状,我无法使用SQL脚本插入数据库,因为我收到一条错误消息,指出字符串常量太长。

java.sql.SQLException: A string constant starting with 'X'<First ~60 Chars>&' is too long.

如果我运行NetBeans

[Exception, Error Code 0, SQLState 54002] A string constant starting with ... is too long.

我尝试将字符串分解成58十六进制长的较小块,并在字符串之间使用||来使用Derby concatenation

这使我得到包含以下内容的声明

CAST (X'<58 HEX Length>' || '<Another 58 HEX Length>' || ... AS BLOB)

这样做会给我另一个错误。

java.sql.SQLSyntaxErrorException: No authorized routine named '||' of type 'FUNCTION' 
    having compatible arguments was found.

我尝试寻找其他解决方案,但找不到任何解决该问题的方法。

我能做些什么吗?缺少什么了吗?

0 个答案:

没有答案