Re: Retrieving bytea column problem - they're are sometimes truncated - Mailing list pgsql-jdbc

From Barry Lind
Subject Re: Retrieving bytea column problem - they're are sometimes truncated
Date
Msg-id 3BF9BF2F.2000409@xythos.com
Whole thread Raw
In response to Re: Retrieving bytea column problem - they're are sometimes truncated  ("Mike Cannon-Brookes" <mike@atlassian.com>)
List pgsql-jdbc
Mike,

I tried but couldn't reproduce this problem.  Below is the code I ran to
try to reproduce.  I tried for various different sizes of content (with
my last run being 658890 bytes without any problem).

In order to research this more I will need a test case that reproduces
the problem you are seeing.

My environment:
Linux 2.4.7, PG 7.2b2, JDBC current CVS

(test program below requires the following table):

create table test (cola bytea);



import java.io.*;
import java.sql.*;

public class test2 {

   public static void main(String[] p_args) {
     try {
       Class.forName("org.postgresql.Driver");
       Connection l_conn;
       l_conn =
DriverManager.getConnection("jdbc:postgresql://localhost:5432/files",
"blind", "");
       l_conn.setAutoCommit(false);
       PreparedStatement l_stmt = l_conn.prepareStatement("insert into
test values (?)");
       Statement l_stmt2 = l_conn.createStatement();

       StringBuffer l_strBuf = new StringBuffer();
       for (int i = 0; i< 10000; i++) {
           l_strBuf.append("-" + i + "-");

l_strBuf.append("123456789012345678901234567890123456789012345678901234567890");
       }
       byte[] l_value = l_strBuf.toString().getBytes();
       System.out.println("insert length = " + l_value.length);
       l_stmt.setBytes(1,l_value);
       l_stmt.executeUpdate();
       l_conn.commit();
       ResultSet l_rset = l_stmt2.executeQuery("select cola from test");
       while (l_rset.next()) {
      byte[] l_result = l_rset.getBytes(1);
           System.out.println("select length = " + l_result.length);
//          System.out.println(new String(l_result));
       }
     } catch (Exception l_se) {
       System.out.println(l_se.toString());
     }

   }



The results from running the above was:

$ java test2
insert length = 658890
select length = 658890

As I mentioned I tried with various different values of i in the program
but I always retrieved the same amount of data as I inserted.

thanks,
--Barry





Mike Cannon-Brookes wrote:

> Barry,
>
> Running postgres 7.1.3 and a freshly built driver from CVS.
>
> -mike
>
>
>
>>-----Original Message-----
>>From: Barry Lind [mailto:barry@xythos.com]
>>Sent: Sunday, November 18, 2001 7:46 AM
>>To: mike@atlassian.com
>>Cc: pgsql-jdbc@postgresql.org
>>Subject: Re: Retrieving bytea column problem - they're are sometimes
>>truncated
>>
>>
>>Mike,
>>
>>Which version of the database and drivers are you running?
>>
>>thanks,
>>--Barry
>>
>>
>>Mike Cannon-Brookes wrote:
>>
>>
>>>G'day all,
>>>
>>>I've been hacking at this all day and have now been through my
>>>
>>source and
>>
>>>then the driver source - grokking the entire postgres jdbc driver in the
>>>process ;)
>>>
>>>What happens is when I store binary content into a bytea field
>>>
>>it works fine
>>
>>>(using setBinaryStream() or setBytes()). I've tested this by
>>>
>>looking into
>>
>>>the DB at the actual content itself.
>>>
>>>However when I retrive the content, it's sometimes truncated.
>>>
>>(It appears to
>>
>>>be for content greater than about 25k but that's a very rough
>>>approximation).
>>>
>>>here's a snippet of my debugging code:
>>>
>>>org.postgresql.jdbc2.ResultSet.java
>>>
>>>if (fields[columnIndex - 1].getPGType().equals("bytea"))
>>>{
>>>    String s = getString(columnIndex);
>>>    System.out.println("s = " + s);
>>>    byte[] result = PGbytea.toBytes(s);
>>>    System.out.println("result.length = " + result.length);
>>>    return result;
>>>}
>>>
>>>the result.length returned (in one example) is 59402 bytes,
>>>
>>when the length
>>
>>>of the bytea field is actually 190608 bytes.
>>>
>>>printing s to the console indeed reveals that it has been truncated.
>>>
>>>(As a test I inserted a list of a few thousand emails addresses
>>>
>>in order,
>>
>>>starting from a-z - it gets truncated around f - although the
>>>
>>DB has all the
>>
>>>way through to z ;))
>>>
>>>I looked deeper into the source for about 30 minutes but got a
>>>
>>little lost
>>
>>>in pg_stream in QueryExecutor and figured I'd leave the rest of the
>>>investigation up to the experts!
>>>
>>>I couldn't find any related queries in the archives.
>>>
>>>Can anyone help? Or provide insight as to where I should start looking?
>>>
>>>Cheers,
>>>Mike
>>>
>>>Mike Cannon-Brookes :: mike@atlassian.com
>>>
>>>Atlassian :: http://www.atlassian.com
>>>     Supporting YOUR J2EE World
>>>
>>>
>>>
>>>---------------------------(end of broadcast)---------------------------
>>>TIP 4: Don't 'kill -9' the postmaster
>>>
>>>
>>>
>>
>>
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 4: Don't 'kill -9' the postmaster
>
>



pgsql-jdbc by date:

Previous
From: Bruce Momjian
Date:
Subject: if( and while(
Next
From: Poul Kristensen
Date:
Subject: java and postgresql