下载Postgres大对象后,将autoCommit设置为true的正确方法是什么?

时间:2015-12-07 10:05:04

标签: java postgresql

我正在使用PostgreSQL大对象API来存储二进制文件。 我需要实现一个资源来下载这个文件。 下载资源生成一个' application / octet-stream'响应。 我明白了,我应该回来自动提交'真的'下载完成后。如果我设置自动提交'最后' (如下面的代码所示),文件未被下载。

我是否需要实现一些InputStream扩展,并且只设置' auto commit'真的'什么时候关闭流? 在这里采取的最佳方法是什么?

 try (Connection connection = Portal.getInstance().getConnectionProvider().getConnection())
    {
        try
        {
            connection.setAutoCommit(false); //large objects cannot be used in auto commit mode
            PGConnection pgConnection = connection.unwrap(PGConnection.class);
            LargeObjectManager largeObjectManager = pgConnection.getLargeObjectAPI();
            LargeObject largeObject = largeObjectManager.open(largeObjectId, LargeObjectManager.READ);           
            return largeObject.getInputStream();
        }
        finally
        {
            //connection.setAutoCommit(true);
        }

1 个答案:

答案 0 :(得分:1)

仅返回输入流不构成下载。您必须完成下载,即将输入流读取到其末尾,然后设置自动提交。