将blob插入informix数据库时的NPE

将blob插入informix数据库时的NPE,informix,Informix,当我想将blob插入数据库时,出现了以下异常: java.lang.NullPointerException at com.informix.jdbc.IfxSmartBlob.IfxLoColInfo(IfxSmartBlob.java:313) ~[ifxjdbc.jar:?] at com.informix.jdbc.IfxSmBlob.i(IfxSmBlob.java:791) ~[ifxjdbc.jar:?] at com.informi

当我想将blob插入数据库时,出现了以下异常:

java.lang.NullPointerException
        at com.informix.jdbc.IfxSmartBlob.IfxLoColInfo(IfxSmartBlob.java:313) ~[ifxjdbc.jar:?]
        at com.informix.jdbc.IfxSmBlob.i(IfxSmBlob.java:791) ~[ifxjdbc.jar:?]
        at com.informix.jdbc.IfxSmBlob.a(IfxSmBlob.java:520) ~[ifxjdbc.jar:?]
        at com.informix.jdbc.IfxResultSet.b(IfxResultSet.java:295) ~[ifxjdbc.jar:?]
        at com.informix.jdbc.IfxStatement.c(IfxStatement.java:1283) ~[ifxjdbc.jar:?]
        at com.informix.jdbc.IfxPreparedStatement.executeUpdate(IfxPreparedStatement.java:421) ~[ifxjdbc.jar:?]
        at com.ibm.ws.rsadapter.jdbc.WSJdbcPreparedStatement.pmiExecuteUpdate(WSJdbcPreparedStatement.java:1187) ~[com.ibm.ws.runtime.jar:?]
        at com.ibm.ws.rsadapter.jdbc.WSJdbcPreparedStatement.executeUpdate(WSJdbcPreparedStatement.java:804) ~[com.ibm.ws.runtime.jar:?]
有没有办法解决问题?我试着用谷歌搜索,但没有找到关于这个例外的信息

声明如下:

插入my_表col1、col2、col3、blob值?、?、?、

我正在使用InformixDB:12.10.FC4

更新:

Wnn我在java或groovy这样的独立应用程序中尝试它,它可以正常工作。当我想从运行在WebSphereServer8.5.5.2上的web应用程序中插入blob时,就会发生此异常

ddl:

Groovy:有效的脚本

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;

import groovy.sql.Sql

class sql {

static main(args) { 
println "START"


def sql = Sql.newInstance( 'url', 'user', 'pass', 'com.informix.jdbc.IfxDriver' );
sql.connection.autoCommit = false

def ps = sql.connection.prepareStatement("insert into my_table (col1,col2,col3,blob_col) values(?,?,?,?)");
ps.setString(1, "1");
ps.setString(2, "1");
ps.setString(3, "1");
byte[] bytes = new byte[100];
ps.setBytes(4, bytes);

ps.execute()
ps.close()
fis.close()

sql.commit()
println "END"
}
}
更新2:

另一个奇怪的例外。我真的不知道我们的数据库专家用这个数据库做什么

java.lang.ClassCastException: com.informix.jdbc.IfxUDT incompatible with com.informix.jdbc.IfxInteger
        at com.informix.jdbc.IfxSmartBlob.IfxLoOpen(IfxSmartBlob.java:494) ~[ifxjdbc.jar:?]
        at com.informix.jdbc.IfxBblob.<init>(IfxBblob.java:77) ~[ifxjdbc.jar:?]
        at com.informix.jdbc.IfxSmBlob.toBytes(IfxSmBlob.java:1030) ~[ifxjdbc.jar:?]
        at com.informix.jdbc.IfxResultSet.getBytes(IfxResultSet.java:1216) ~[ifxjdbc.jar:?]
        at com.informix.jdbc.IfxResultSet.getBytes(IfxResultSet.java:1231) ~[ifxjdbc.jar:?]
        at com.ibm.ws.rsadapter.jdbc.WSJdbcResultSet.getBytes(WSJdbcResultSet.java:909) ~[com.ibm.ws.runtime.jar:?]
但是我仍然想知道google上没有关于这个错误的信息。你能创建一个简单的test_blobs表,并像我的Jython代码那样插入一些图片吗

# writing picture into blob
db = DriverManager.getConnection(db_url, usr, passwd)
blob = FileInputStream('picture.jpeg')
pstm = db.prepareStatement("INSERT INTO test_blobs (content) VALUES (?)")
pstm.setBinaryStream(1, blob)
rs = pstm.execute()
blob.close()

# reading just inserted blob
pstm = db.prepareStatement("SELECT content FROM test_blobs")
rs = pstm.executeQuery()
while (rs.next()):
    image_stream = rs.getBinaryStream(1)
    fout = ByteArrayOutputStream()
    while 1:
        b = image_stream.read()
        if b < 0:
            break
        fout.write(b)
    arr = fout.toByteArray()
    f = open('picture_from_blob.jpeg', 'wb')
    f.write(arr)
    f.close()
还向我们展示:

JDBC驱动程序的版本, 表模式Informix至少有3种类型的blob
我使用的是JDBC3.5Informix驱动程序,列只是一个blob。另一个问题是,当我创建了与您类似的groovy脚本时,它就可以正常工作了。NPE仅在尝试插入blob时出现在我的web应用程序上,仅在版本12.10.FC4中出现。在版本12.10.FC2中,一切正常,OKJDBC 3.50有点旧。我刚刚检查过,IBM提供了4.10.JC4DE供下载。也许升级会有帮助。我也尝试了4.1,但没有成功。这似乎是新数据库引擎中的错误。你能给我们看看你在测试中使用的代码吗:表模式和groovy脚本?我不知道groovy脚本如何帮助你,但我更新了我的问题。有没有一种方法可以询问IBM开发人员在类的第313行中抛出异常时他们在做什么?谢谢分享代码。它与我的Informix 11.50.FC4一起工作。关于您的另一个SO问题:stackoverflow.com/questions/22662026/how-to-insert-byte-array-into-informix-blob/我发现当SQL语句以空格开头时,informix报告了一个奇怪的问题。如果有帮助,请删除它并写信给我们。当您使用WAS和web应用程序时,遇到问题时,您是如何做到的?那么您有什么代码?对不起,复制/粘贴错误:这个主题也是我写的,现在不是问题。可能db有点奇怪,我不明白,因为现在我在新db上尝试了相同的应用程序,它刚刚创建,现在可以工作了。但我真的很好奇1 dba和为什么会出现这种异常情况?您在WAS中对独立应用程序和web应用程序使用了相同的驱动程序版本吗?存在多个IFXSMARTBLOB,IFXLOCOLINFO不工作。它总是返回NULL。在某些驱动程序版本中。
# writing picture into blob
db = DriverManager.getConnection(db_url, usr, passwd)
blob = FileInputStream('picture.jpeg')
pstm = db.prepareStatement("INSERT INTO test_blobs (content) VALUES (?)")
pstm.setBinaryStream(1, blob)
rs = pstm.execute()
blob.close()

# reading just inserted blob
pstm = db.prepareStatement("SELECT content FROM test_blobs")
rs = pstm.executeQuery()
while (rs.next()):
    image_stream = rs.getBinaryStream(1)
    fout = ByteArrayOutputStream()
    while 1:
        b = image_stream.read()
        if b < 0:
            break
        fout.write(b)
    arr = fout.toByteArray()
    f = open('picture_from_blob.jpeg', 'wb')
    f.write(arr)
    f.close()