fli*_*ixe 1 java postgresql inputstream resultset
在我的 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();
Run Code Online (Sandbox Code Playgroud)
读取表格时,我使用相同的 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();
}
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试读取流时,出现异常:
int number = inputStream.read()
Run Code Online (Sandbox Code Playgroud)
或者替代地
byte[] byteArray = new byte[1024];
int number = inputStream.read(byteArray);
Run Code Online (Sandbox Code Playgroud)
例外:
org.postgresql.util.PSQLException:错误:无效的大对象描述符:0
我在这里总结了代码,因为在我的应用程序中它是分布式的。要点是,当流来自的数据库连接已经关闭时,当前会读取输入流中的内容。然而,这段代码以前可以在 postgres 上运行,现在仍然可以在 oracle 上运行。我尝试将 postgres 驱动程序 9.3 以及 42.1.4 与 Postgres 9.2 一起使用。
我的问题:从 sql 结果集派生的 java 输入流是否独立于数据库连接和结果集的状态?
| 归档时间: |
|
| 查看次数: |
4425 次 |
| 最近记录: |