我有一个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.
我尝试寻找其他解决方案,但找不到任何解决该问题的方法。
我能做些什么吗?缺少什么了吗?