pg.ddx.io  pgsql-interfaces@postgresql.org mailing list archive  
help / color / mirror / Atom feed
Trouble with large objets and jdbc
2+ messages / 2 participants
[nested] [flat]

* Trouble with large objets and jdbc
@ 1999-05-12 11:35 Henri-Pierre CHARLES <hpc@prism.uvsq.fr>
  1999-05-13 15:26 ` Re: [INTERFACES] Trouble with large objets and jdbc Brian P Millett <bpm@ec-group.com>
  0 siblings, 1 reply; 2+ messages in thread

From: Henri-Pierre CHARLES @ 1999-05-12 11:35 UTC (permalink / raw)
  To: pgsql-interfaces@hub.org

Hello,

I want to use large objets to store images in a database with the jdbc
interface. I have try to use PreparedStatement which has
setBinaryStream () but it's not possible with the old version I
usually use (6.4.2). I have download the 6.5b1 and unfortunately
setBinaryStream () is still not implemented.

I have tried to store the uuencoded image in a text field but they are
a strict limitation of 8190 byte for a field, which is too small.

I have tried to use LargeObjects, with no luck. The example.blobtest
fail. I have join the error message at the end of this mail (I use
postgresql 6.5b1 on a FreeBSD 3.0 computer)

example.ImageViewer sometime fail

Somebody can help ?

Thanks 

-- 
% Henri-Pierre.Charles@prism.uvsq.fr PRiSM, Université de Versailles
% Tel: 01 39 25 43 44        45, Av. des États Unis 78000 Versailles
% Il reste 58982399 secondes jusqu'au 01/01/2000


>java -Djdbc.driver=postgresql.Driver example.blobtest jdbc:postgresql:test anonymous ""
PostgreSQL blobtest v6.3 rev 1

Connecting to Database URL = jdbc:postgresql:test
Connected...Now creating a statement

----------------------------------------------------------------------
Testing postgresql large object api

Gaining access to large object api
Test 1 Creating a large object

Creating a large object
Opening test source object
Copying file to large object
Block size=2048 offset=0
Block size=2048 offset=2048
Block size=2048 offset=4096
Block size=413 offset=6144
Closing object
Test 2 Reading a large object and save as a file

Opening large object 18785
Opening test destination object
Copying large object to file
Exception caught.
java.sql.SQLException: IOError while reading from backend: java.io.IOException: The backend has broken the connection. Possibly the action you have attempted has caused it to close.
java.sql.SQLException: IOError while reading from backend: java.io.IOException: The backend has broken the connection. Possibly the action you have attempted has caused it to close.
        at postgresql.PG_Stream.ReceiveChar(PG_Stream.java:183)
        at postgresql.fastpath.Fastpath.fastpath(Fastpath.java:114)
        at postgresql.fastpath.Fastpath.fastpath(Fastpath.java:188)
        at postgresql.largeobject.LargeObject.seek(LargeObject.java:207)
        at postgresql.largeobject.LargeObject.size(LargeObject.java:250)
        at example.blobtest.ownapi_test2(blobtest.java:144)
        at example.blobtest.ownapi(blobtest.java:77)
        at example.blobtest.<init>(blobtest.java:50)
        at example.blobtest.main(blobtest.java:188



^ permalink  raw  reply  [nested|flat] 2+ messages in thread

* Re: [INTERFACES] Trouble with large objets and jdbc
  1999-05-12 11:35 Trouble with large objets and jdbc Henri-Pierre CHARLES <hpc@prism.uvsq.fr>
@ 1999-05-13 15:26 ` Brian P Millett <bpm@ec-group.com>
  0 siblings, 0 replies; 2+ messages in thread

From: Brian P Millett @ 1999-05-13 15:26 UTC (permalink / raw)
  To: Henri-Pierre CHARLES <hpc@prism.uvsq.fr>; +Cc: pgsql-interfaces@hub.org

Henri-Pierre CHARLES wrote:

> Hello,
>
> I want to use large objets to store images in a database with the jdbc
> interface. I have try to use PreparedStatement which has
> setBinaryStream () but it's not possible with the old version I
> usually use (6.4.2). I have download the 6.5b1 and unfortunately
> setBinaryStream () is still not implemented.

This bug has been fixed as of Monday.  They (Hackers group) have also fixed a big hairy bug with the backend.  If you use the anonymous cvs to checkout the latest snapshot, you will
find an ImageViewer.java example that works, the blobtest.java works also.

I also use code such as this to work fine:


  // The UPDATE statement to be used for populating the item_picture and
  // item_descr columns
  String itemUpdateStmt = "UPDATE item SET item_picture = ?, item_descr = ?"+
   " WHERE item_num = ?";
   // Create a PreparedStatement object & use it to update the item_picture
   // and item_descr columns in the item table
   PreparedStatement updateStmt = conn.prepareStatement(itemUpdateStmt);
    // File names for the image & text files
    String itemPictureFileName = ("item_" + new Integer(i).toString()
             + ".gif");
    String itemDescrFileName = ("item_" + new Integer(i).toString()
           + ".txt");

    // java.io.File objects corresponding to the image & text files
    File itemPictureFile = new File(itemPictureFileName);
    File itemDescrFile = new File(itemDescrFileName);

    // Byte arrays to store text & byte data for the item_picture and
    // item_descr columns
    byte itemPictureArray [] = new byte[(int)itemPictureFile.length()];
    String itemDescrString = "";

    // Using java.io.FileInputStream to reading the image & text files
    // into byte arrays
    FileInputStream itemPictureInputStream = new
     FileInputStream(itemPictureFile);
    itemPictureInputStream.read(itemPictureArray, 0,
           (int)itemPictureFile.length());

    FileReader fr = new FileReader(itemDescrFile);
    BufferedReader br = new BufferedReader(fr);
    String lineIn;
    while ((lineIn = br.readLine()) != null)
     itemDescrString += lineIn;

    // Set the values of the parameters & execute the statement
    updateStmt.setBytes(1, itemPictureArray);
    updateStmt.setString(2, itemDescrString);
    updateStmt.setInt(3, i);
    updateStmt.executeUpdate();


Then to read/view the image, I do:

     // read the image from the resultset
     byte itemPictureArray [] = queryResults.getBytes(2);
      Image img = Toolkit.getDefaultToolkit().createImage(itemPictureArray);
      itemPictureCanvas.setImage(img);
      itemPictureCanvas.repaint();


--
Brian Millett
Enterprise Consulting Group     "Heaven can not exist,
(314) 205-9030                     If the family is not eternal"
bpm@ec-group.com                   F. Ballard Washburn





^ permalink  raw  reply  [nested|flat] 2+ messages in thread


end of thread, other threads:[~1999-05-13 15:26 UTC | newest]

Thread overview: 2+ messages (download: mbox mbox.gz follow: Atom feed)
-- links below jump to the message on this page --
1999-05-12 11:35 Trouble with large objets and jdbc Henri-Pierre CHARLES <hpc@prism.uvsq.fr>
1999-05-13 15:26 ` Brian P Millett <bpm@ec-group.com>

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox