当我尝试通过 JDBC 向 Informix TEXT 列插入一些数据时出现问题。在 ODBC 中,我可以像这样简单地运行 SQL:
INSERT INTO test_table (text_column) VALUES ('insert')
但这在 JDBC 中不起作用,我得到了错误:
617: A blob data type must be supplied within this context.
我搜索了这样的问题,发现了 2003 年的消息:
我将代码更改为使用 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 动态服务器版本 11.50.TC2DE
- 客户:
- ODBC 驱动程序 3.50.TC3DE
- 适用于 IBM Informix Dynamic Server 3.50.JC3DE 的 IBM Informix JDBC 驱动程序