| From: | Barry Lind <blind(at)xythos(dot)com> | 
|---|---|
| To: | Conor Beverland <cb801(at)doc(dot)ic(dot)ac(dot)uk> | 
| Cc: | pgsql-jdbc(at)postgresql(dot)org | 
| Subject: | Re: getBytes() returning too much data | 
| Date: | 2004-01-08 01:17:38 | 
| Message-ID: | 3FFCAFB2.8070709@xythos.com | 
| Views: | Whole Thread | Raw Message | Download mbox | Resend email | 
| Thread: | |
| Lists: | pgsql-jdbc | 
Conor,
You are running into a bug in the server where it is doing character set 
conversion on the bytea data.  There are a number of threads in the 
email archives that talk about this bug.  The workaround is to use 
'unicode' as the encoding of your database.
thanks,
--Barry
Conor Beverland wrote:
> Hi,
> 
> I'm having a problem retreiving images from a postgreSQL database using
> ResultSet.getBytes() The image is stored in the database as a bytea
> type. I'm running java version 1.4.1 and postgreSQL version 7.3.4
> 
> When I insert a file it seems to be the correct size inside the database
> (checked using SQL - length(image))
> However when I use getBytes() or even getBinaryStream() to get the data
> back from the database it always returns too much data.
> The returned bytes contain at least some of the correct data (perhaps
> all) with a load of extra bytes throughout the file. The size increase
> is consistent for each file.
> 
> Does anyone know what I'm doing wrong and/or how I might go about making
> it work correctly?
> 
> Thanks,
> Conor
> 
> I've inserted an image like this: -
> 
> File file = new File("myimage.gif");
> try {
>    FileInputStream fis = new FileInputStream(file);
>    int length = (int)file.length();
>    byte[] bytes = new byte[length];
>    fis.read(bytes);
>    fis.close();
>    PreparedStatement ps = db.prepareStatement("INSERT INTO images
>       (image) VALUES (?)");
>    ps.setBytes(1, bytes);
> } catch () { }
> 
> And I try to get the image back like this: -
> 
> try {
>    Statement stmt = db.createStatement();
>    rs = stmt.executeQuery("SELECT image, length(image) FROM images");
>    while (rs.next()) {
>       byte[] imgBytes = rs.getBytes(1);
>    }
> } catch () { }
> 
> ---------------------------(end of broadcast)---------------------------
> TIP 6: Have you searched our list archives?
> 
>                http://archives.postgresql.org
> 
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Barry Lind | 2004-01-08 01:28:08 | Re: PreparedStatement parameters and mutable objects | 
| Previous Message | Oliver Jowett | 2004-01-08 00:02:32 | Re: getTypeInfo() bug |