Java Postgres和大型对象:大型对象描述符无效:0
在我的Java应用程序中,我正在使用LargeObject接口写入lo(大对象)类型的二进制数据: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,
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的状态?关闭大型对象后,您无法读取它 此外,打开和读取大型对象必须在一个数据库事务中进行。大对象在事务结束时关闭