Subject: [Pljava-dev] How to read LargeObject with pljava?

From: olegvvasylenko at gmail.com (Oleg Vasylenko)
Date: Sat, 13 Jun 2009 11:53:19 +0300

Hi everybody!

Have some code to read LargeObject from db and create digest message for 
the it content. The code generate an error attemtting to read a portion 
of LO.

Could anybody give an example how to read LO from database?

I'm using jre1.6.0.13, pljava1.4.0, postgresql8.3.7.

Thanks.

import java.io.FileOutputStream;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.logging.Logger;
import org.postgresql.largeobject.LargeObject;
import org.postgresql.largeobject.LargeObjectManager;

public class ServerDigestCreator {

public static String 
anotherCreateStrDigest(org.postgresql.pljava.internal.Oid lObjectId) 
throws  SQLException,NoSuchAlgorithmException
    {
        String digest = null;
        java.sql.Savepoint sp = null;
        if(lObjectId==null) return null;
        java.sql.Connection aConnection = 
DriverManager.getConnection("jdbc:default:connection");
        try{
       
        sp = aConnection.setSavepoint();
        org.postgresql.pljava.internal.LargeObject lo =  
org.postgresql.pljava.internal.LargeObject.open(lObjectId, 
org.postgresql.pljava.internal.LargeObject.INV_READ);
           
        MessageDigest aDigest = MessageDigest.getInstance("md5");
       
        if(lo==null)       {
                aConnection.releaseSavepoint(sp);
                return digest;
        }
        byte buf[] = new byte[2048];
        int s=0;
   
        while((s = lo.read(buf))!=0)              
<---------------------- Error occurs here 
=============================================================
                aDigest.update(buf);      
   
        byte[] digestByteArray = aDigest.digest();
        BigInteger tempBI = new BigInteger(digestByteArray);
        digest = tempBI.toString();      
        lo.close();
   
        aConnection.releaseSavepoint(sp);
        }
        catch(SQLException ex)
        {   
            if(sp!=null)
                aConnection.rollback(sp);
            Logger.getAnonymousLogger().info("ERROR: " + ex.getMessage() 
+ "\n");
            throw new SQLException(ex.getMessage());
        }
       
        return digest;
    }