Java Postgres和大型对象:大型对象描述符无效:0

Java Postgres和大型对象:大型对象描述符无效:0,java,postgresql,inputstream,resultset,Java,Postgresql,Inputstream,Resultset,在我的Java应用程序中,我正在使用LargeObject接口写入lo(大对象)类型的二进制数据: LargeObjectManager lLOManager = ((org.postgresql.PGConnection) aDatabaseConnection).getLargeObjectAPI(); long oid = lLOManager.createLO(); LargeObject lo = lLOManager.open(oid,

在我的Java应用程序中,我正在使用LargeObject接口写入lo(大对象)类型的二进制数据:

        LargeObjectManager lLOManager = ((org.postgresql.PGConnection) aDatabaseConnection).getLargeObjectAPI();
        long oid = lLOManager.createLO();
        LargeObject lo = lLOManager.open(oid, LargeObjectManager.WRITE);

        if (aBLOB != null)
            lo.write(aBLOB);

        lo.close();
读取表时,我使用相同的api获取inputstream:

LargeObjectManager lLOManager = ((org.postgresql.PGConnection) aDatabaseConnection).getLargeObjectAPI();
            long lOid = aRs.getLong(aIndex);
            if (lOid != 0)
            {
                LargeObject lObj = lLOManager.open(lOid, LargeObjectManager.READ);
                inputStream = lObj.getInputStream();
                lObj.close();
            }
但是,当我尝试读取流时,我得到一个异常:

int number = inputStream.read()
或者

byte[] byteArray = new byte[1024];
int number = inputStream.read(byteArray);
例外情况:

org.postgresql.util.PSQLException:错误:无效的大对象 描述符:0

我总结了这里的代码,因为在我的应用程序中它是分布式的。关键是,当流所来自的db连接已经关闭时,当前将读取inputstream中的内容。然而,这段代码在一段时间前曾适用于postgres,现在仍然适用于oracle。我尝试使用PostgresDriver9.3以及42.1.4和Postgres9.2


我的问题:从sql resultset派生的java inputstream是否独立于db连接和resultset的状态?

关闭大型对象后,您无法读取它

此外,打开和读取大型对象必须在一个数据库事务中进行。大对象在事务结束时关闭