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: