如何在 informix 中插入 blob 或 clob 列

Posted

技术标签:

【中文标题】如何在 informix 中插入 blob 或 clob 列【英文标题】:how to insert blob or clob column in informix 【发布时间】:2015-03-20 14:17:01 【问题描述】:

我是 informix 数据库的新手。我想知道如何在informix 中插入blob 和clob 类型的列。我需要这两种类型的列的示例查询。如果有人提供帮助,我将不胜感激...

【问题讨论】:

您使用哪种编程语言和绑定/库? 请参阅How to write a binary blob onto disk in Informix 以获取答案的选择部分:请参阅Operations on blob data in Informix 以获取有关其他功能的帮助信息。您确实需要指定您计划使用的编程语言和绑定; ESQL/C 的答案不同于 ODBC、JDBC、... 【参考方案1】:

这是我的 Jython 代码,它使用 JDBC 和准备好的语句来测试来自 Informix 数据库的 INSERTSELECTblob

#!/usr/bin/env jython
# -*- coding: utf8 -*-

import time

from java.sql import DriverManager
from java.lang import Class
from java.io import FileInputStream
from java.io import ByteArrayOutputStream

Class.forName("com.informix.jdbc.IfxDriver")

"""
create table _blob_test_so (
    id serial,
    txt varchar(30),
    column_blob blob
);
"""


def test_blob_insert(db):
    print('inserting gif picture into blob table...')
    blob = FileInputStream('snoopy_comics20121023.gif')
    insert_stmt = db.prepareStatement("INSERT INTO _blob_test_so (txt, column_blob) VALUES (?, ?)")
    insert_stmt.setString(1, 'test %s' % (time.strftime('%Y-%m-%d %H:%M:%S')))
    insert_stmt.setBinaryStream(2, blob)
    rec_cnt = insert_stmt.executeUpdate()
    blob.close()
    insert_stmt.close()
    print('records changed: %d' % (rec_cnt))


def test_blob_select(db):
    print('selecting data from blob table...')
    pstm = db.prepareStatement("SELECT id, txt, column_blob FROM _blob_test_so")
    rs = pstm.executeQuery()
    while (rs.next()):
        id = rs.getInt(1)
        txt = rs.getString(2)
        image_stream = rs.getBinaryStream(3)
        fout = ByteArrayOutputStream()
        while 1:
            b = image_stream.read()
            if b < 0:
                break
            fout.write(b)
        arr = fout.toByteArray()
        fname_out = 'test_%s.gif' % (id)
        print('%d:%s: fname: %s %d [b]' % (id, txt, fname_out, len(arr)))
        f = open(fname_out, 'wb')
        f.write(arr)
        f.close()
    rs.close()


db = DriverManager.getConnection('jdbc:informix-sqli://test-informix:9088/test:informixserver=ol_testifx;DB_LOCALE=pl_PL.CP1250;CLIENT_LOCALE=pl_PL.CP1250;charSet=CP1250', 'user', 'passwd')
test_blob_insert(db)
test_blob_select(db)

【讨论】:

以上是关于如何在 informix 中插入 blob 或 clob 列的主要内容,如果未能解决你的问题,请参考以下文章

在 Informix 10 中检索或删除带有 blob 的行

Informix:如何获取最后插入记录的 id

将数据插入 Informix 中的 TEXT 类型列

如何在informix的插入查询中添加行跳转?

如何在 TEXT 数据类型字段中插入数据? (Informix)

如何在 Informix 中转换插入日期时间的格式?