我在Informix数据库的一些图像,作为二进制blob字段(JPG),我怎样才能写入图像投影到磁盘与SQL?

有帮助吗?

解决方案

被存储在字节或BLOB字段?

的数据

如果该数据被存储在BLOB列,则可以使用:

SELECT LOTOFILE(blob_column, '/path/to/file/on/client', 'client')
  FROM TheTable
 WHERE PK_Column = 23411   -- PK value

如果该数据被存储在一个字节的列,则你必须工作相当困难。如果你有ESQL / C(ClientSDK)和你的机器上的C编译器,那么我建议从 IIUG软件获得SQLCMD归档和提取软件。你需要你的Informix环境设置,你需要能够编译C程序。然后运行:

./configure --prefix=$HOME/bin

这并没有多大无论如何指定为前缀 - 你只需要运行配置脚本

然后,您可以编译一切(make),或者你可以简单地编译程序selblobmake selblob)。那个节目就是我所说的“小插曲”;微观计划,说明如何选择BYTE BLOB到磁盘。它是,但是,也全功能;它将与工作只是你在它扔,或诊断错误东西。

如果您的数据库称为precious,字节数据是表byte_table,列保持的数据是byte_column,和主键列col1(和所需要的值是23)和col2(和所需要的值是"Habeas Corpus"),然后就可以运行:

selblob -d precious -t byte_table -k col1=23 -k col2="Habeas Corpus" \
        -c byte_column -f output_file

此将所述字节值卸载到指定的文件。

如果您还没有ESQL / C或C编译器或使用他们的权限,那么生活是比较困难的。最接近的方法是使用DB-Access中的UNLOAD语句:

dbaccess precious - <<!
unload to "output_file"
select byte_column from byte_table where col1 = 23 and col2 = 'Habeas Corpus';
!

这将创建一个包含字节值的一个十六进制转储(每个字符2个字节)的文件。然后,您需要进行后期处理的文件,以十六进制转换为常规数据。需要注意的是,如果该列是一个TEXT列,而不是一个字节的列,那么就不需要转换。您可以使用一个相当简单的Perl脚本来执行转换(提供的文件是足够小,可以咕噜咕噜到内存 - 你必须更加努力地工作,如果它不是足够小):

perl -w -e '
    $/ = "";
    my $data = <>;
    while (length($data) > 1)
    {
        my $hex = substr($data, 0, 2);
        printf "%c", hex($hex);
        $data = substr($data, 2);
    }' <output_file

长度条件指定“> 1”来处理在卸载数据的末尾的换行符。

(对于“歇斯底里的葡萄干”,又名“历史原因”,我还是叫两个字节和TEXT“blob类型”,即使IDS 9.00介绍了“智能斑点”明确名称BLOB和CLOB,略有不同的对数据类型,大约有相应的功能 - 在我的书,他们都BLOB(小写)类型与老家伙谁在1990年了解到BYTE和TEXT斑点,六年或以上的麻烦添加BLOB和CLOB斑点之前。 。 在任何情况下,没有对老式的斑点一个很好的选择,官方术语;使用“哑斑点”不是政治正确!)

其他提示

您需要写一个小程序,查询数据库并保存斑点到磁盘。大多数数据库都没有“磁盘打开文件”。

的概念
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top