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



在我的Java应用程序中,使用LargeObject Interface写入类型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 来获取输入流:

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

我在这里总结了代码,因为在我的应用程序中它是分布式的。关键是当前读取输入流中的内容,而流来自的数据库连接已经关闭。但是,该代码前段时间曾经适用于 postgres,现在仍然适用于 oracle。我尝试将 postgres 驱动程序 9.3 和 42.1.4 与 Postgres 9.2 一起使用。

我的问题:从 sql 结果集派生的 java 输入流是否独立于数据库连接和结果集的状态?

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

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

相关内容

  • 没有找到相关文章

最新更新