gpt4 book ai didi

java - Postgres 和大对象 : invalid Large-Object-Descriptor: 0

转载 作者:行者123 更新时间:2023-11-29 13:15:38 25 4
gpt4 key购买 nike

在我的 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);

异常(exception):

org.postgresql.util.PSQLException: ERROR: invalid large-object descriptor: 0

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

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

最佳答案

关闭后无法读取大对象。

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

关于java - Postgres 和大对象 : invalid Large-Object-Descriptor: 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49445713/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com