Спасибо за Ваш ответ. Столбец TEXT используется, потому что проект запущен, когда не было столбца LVARCHAR как на стороне сервера (IDS7.2), так и на стороне клиента (SQLLinks из Delphi4). Я думаю, что я буду конвертировать столбцы TEXT в LVARCHAR при обновлении на стороне клиента до более новой Delphi с драйверами dbExpress.

я проблема, когда я пытаюсь вставить некоторые данные в столбец Informix TEXT через JDBC. В ODBC я могу просто запустить SQL следующим образом:

INSERT INTO test_table (text_column) VALUES ('insert')

но это не работает в JDBC, и я получил ошибку:

617: A blob data type must be supplied within this context.

Я искал такую ​​проблему и нашел сообщения от 2003:

http://groups.google.com/group/comp.databases.informix/browse_thread/thread/4dab38472e521269?ie=UTF-8&oe=utf-8&q=Informix+jdbc+%22A+blob+data+type+must+be+ Прилагаемые + в пределах ± 22% этой

Я изменил свой код, чтобы использовать PreparedStatement. Теперь он работает с JDBC, но в ODBC при попытке использовать PreparedStatement я получил ошибку:

Error: [Informix][Informix ODBC Driver][Informix]
Illegal attempt to convert Text/Byte blob type.
[SQLCode: -608], [SQLState: S1000]

Тестовая таблица была создана с:

CREATE TABLE _text_test (id serial PRIMARY KEY, txt TEXT)

Код Jython для тестирования обоих драйверов:

# for Jython 2.5 invoke with --verify
# beacuse of bug: http://bugs.jython.org/issue1127

import traceback
import sys
from com.ziclix.python.sql import zxJDBC

def test_text(driver, db_url, usr, passwd):
    arr = db_url.split(':', 2)
    dbname = arr[1]
    if dbname == 'odbc':
        dbname = db_url
    print "\n\n%s\n--------------" % (dbname)
    try:
        connection = zxJDBC.connect(db_url, usr, passwd, driver)
    except:
        ex = sys.exc_info()
        s = 'Exception: %s: %s\n%s' % (ex[0], ex[1], db_url)
        print s
        return
    Errors = []
    try:
        cursor = connection.cursor()
        cursor.execute("DELETE FROM _text_test")
        try:
            cursor.execute("INSERT INTO _text_test (txt) VALUES (?)", ['prepared', ])
            print "prepared insert ok"
        except:
            ex = sys.exc_info()
            s = 'Exception in prepared insert: %s: %s\n%s\n' % (ex[0], ex[1], traceback.format_exc())
            Errors.append(s)
        try:
            cursor.execute("INSERT INTO _text_test (txt) VALUES ('normal')")
            print "insert ok"
        except:
            ex = sys.exc_info()
            s = 'Exception in insert: %s: %s\n%s' % (ex[0], ex[1], traceback.format_exc())
            Errors.append(s)
        cursor.execute("SELECT id, txt FROM _text_test")
        print "\nData:"
        for row in cursor.fetchall():
            print '[%s]\t[%s]' % (row[0], row[1])
        if Errors:
            print "\nErrors:"
            print "\n".join(Errors)
    finally:
        cursor.close()
        connection.commit()
        connection.close()


#test_varchar(driver, db_url, usr, passwd)
test_text("sun.jdbc.odbc.JdbcOdbcDriver", 'jdbc:odbc:test_db', 'usr', 'passwd')
test_text("com.informix.jdbc.IfxDriver", 'jdbc:informix-sqli://169.0.1.225:9088/test_db:informixserver=ol_225;DB_LOCALE=pl_PL.CP1250;CLIENT_LOCALE=pl_PL.CP1250;charSet=CP1250', 'usr', 'passwd')

Есть ли какие-либо настройки в JDBC или ODBC, чтобы иметь одну версию кода для обоих драйверов?

Информация о версии:

Сервер: IBM Informix Dynamic Server версии 11.50.TC2DEКлиент:Драйвер ODBC 3.50.TC3DEДрайвер JDBC IBM Informix для динамического сервера IBM Informix 3.50.JC3DE

Ответы на вопрос(1)

Ваш ответ на вопрос