как вставить столбец blob или clob в informix

Я новичок в базе данных informix. Я хочу знать, как вставить столбец типа blob и clob в informix. Мне нужен пример запроса для этих двух типов столбцов. Если кто поможет, буду признателен...


person Pyare    schedule 20.03.2015    source источник
comment
Какой язык программирования и какую привязку/библиотеку вы используете?   -  person BlackJack    schedule 20.03.2015
comment
См. Как записать двоичный двоичный объект на диск в Informix для выбора части ответа: см. Операции с данными больших двоичных объектов в Informix для получения некоторой информации о других функциях, которые могут помочь. Вам нужно указать язык программирования и привязку, которую вы планируете использовать; ответы для ESQL/C отличаются от ODBC, JDBC,...   -  person Jonathan Leffler    schedule 20.03.2015


Ответы (1)


Это мой код Jython, который использует JDBC и подготовленные операторы для проверки INSERT и SELECT из blob из базы данных Informix:

#!/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)
person Michał Niklas    schedule 24.03.2015