当前位置: 首页 > 面试题库 >

如何在Informix上的磁盘上写入二进制Blob

荆弘伟
2023-03-14
问题内容

我在notifyix数据库中有一些图像,作为二进制Blob字段(jpg),如何使用SQL将图像写到磁盘上?


问题答案:

数据存储在BYTE或BLOB字段中吗?

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

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

如果数据存储在BYTE列中,则您必须付出更大的努力。如果您的计算机上装有ESQL /
C(ClientSDK)和C编译器,则建议从IIUG软件档案库中获取SQLCMD并解压缩该软件。您需要Informix环境集,并且需要能够编译C程序。然后运行:

./configure --prefix=$HOME/bin

您指定作为前缀没有什么关系-您只需要运行configure脚本即可。

然后,您可以编译所有内容(make),也可以简单地编译程序selblobmake selblob)。这个程序就是我所说的“
vignette”。一个微观程序,显示如何选择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列而不是BYTE列,则不需要转换。您可以使用一个相当简单的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”以在卸载的数据末尾处理换行符。

尽管IDS9.00引入了“智能blob”的显式名称BLOB和CLOB,但它们对数据类型略有不同,我仍将BYTE和TEXT称为“ blob类型”。大致相应的功能-
在我的书中,它们都是blob(小写)类型,这是1990年了解BYTE和TEXT blob的老家伙的麻烦,而在添加BLOB和CLOB
blob之前已有六年或更长时间。的情况下,对于较旧的Blob,没有一个很好的替代官方术语;使用“哑巴Blob”在政治上是不正确的!)



 类似资料:
  • 问题内容: 我无法使用Android API示例中显示的标准InputStreamReader方法在文本文件中读取和写入扩展字符(例如,法语重音字符)。当我使用以下方法读回文件时: 读取的字符串在扩展字符处而不是在行尾处被截断。然后,字符串的后一半进入下一行。我以为我需要将数据持久化为UTF-8,但是我找不到任何示例,而且我是Java的新手。 谁能为我提供示例或相关文档的链接? 问题答案: 非常简

  • 问题内容: 我目前正在实施ping / pong缓冲方案,以安全地将文件写入磁盘。我在Linux / CentOS计算机上使用C ++ / Boost。现在,我面临的问题是强制将文件实际写入磁盘。不管文件系统的所有缓存策略(ext3 / ext4)/ SO自定义规则/ RAID控制器/硬盘控制器如何,都可以这样做吗? 最好使用普通的fread()/ fwrite(),c ++ ostream或bo

  • 问题内容: 我是一名中级新手,擅长于AJAX。在阅读JavaScript时,我感到奇怪的是,我一直在借鉴的大多数示例都使用PHP进行了这种操作。我知道你们中许多人可能会争辩说“我做错了”或“ JavaScript是一种客户端语言”等问题,但问题仍然存在。。。您可以仅使用JavaScript编写文件吗? 问题答案: 您可以使用 Google Gears之 类的东西来生成JS应用程序,这些应用程序可以

  • 关闭没有备份的笔记本电脑和存储的数据。也许如果你拉电池,它不会保存)Redis上传数据到内存本身?如何设置自动保存后,每次更改?还是更容易运行一个命令手动?

  • 问题内容: 我正在使用Flash录制音频并将其上传到节点服务器。Flash客户端是jrecorder的变体。当用户完成录制后,将使用POST请求(而不是表单,因为Flash无法创建文件)来上传音频,并将音频ByteArray作为POST请求的数据(请参见此处的更多信息)。 我可以使用下面的代码在Node- land上正确接收文件,但是发出的音频被破坏了,您听不到任何声音。话虽如此,该文件的内容可以