Re: java.lang.NegativeArraySizeException at org.postgresql.jdbc1.AbstractJdbc1Statement.setBinaryStream() - Mailing list pgsql-jdbc

From Frederic Thomas
Subject Re: java.lang.NegativeArraySizeException at org.postgresql.jdbc1.AbstractJdbc1Statement.setBinaryStream()
Date
Msg-id NMENLJGHCHNAEDIPODIEAEADKLAA.frederic@instranet.com
Whole thread Raw
In response to Re: java.lang.NegativeArraySizeException at  (Kris Jurka <books@ejurka.com>)
Responses Re: java.lang.NegativeArraySizeException at  (Kris Jurka <books@ejurka.com>)
List pgsql-jdbc
> I think the real question is: why are you calling setBinaryStream on a
> text field?  Shouldn't you just do:  prepStatement.setString(1,str);
> instead of going through the BinaryStream?
The reason is (probably?) because prepStatement.setString() is used to
convert a String into an SQL VARCHAR or LONGVARCHAR value (see the Java 1.3
documentation) but in this particular table, we've TEXT fields and not
VARCHAR fields. Another reason would be that our product is multi-database,
and this code is shared in our SQL layer (by opposition to the database
specific layer, which offers compatibility with Oracle, DB2, SQLServer, and,
of course, PostgreSQL).

> In any case the driver shouldn't throw an Exception like that.  Here's a
> patch that fixes that.
Glad to see that it wasn't a serious problem. Thanks a lot for the patch.
However, is there a way to retrieve only the source code for the
pg73jdbc2.jar driver, by opposition to the whole product source code?

An additional question: do you know if a new binary version of the 7.3
driver will be available sometimes? I'd like to avoid compiling in a "non
professional" way a driver that I will ship to my customers, and would
prefer to rely on the "official" binary release of it.

Thanks again for your help,
Frederic Thomas.

-----Original Message-----
From: Kris Jurka [mailto:books@ejurka.com]
Sent: mardi 18 novembre 2003 08:50
To: Frederic Thomas
Cc: pgsql-jdbc@postgresql.org
Subject: Re: [JDBC] java.lang.NegativeArraySizeException at
org.postgresql.jdbc1.AbstractJdbc1Statement.setBinaryStream()




On Tue, 18 Nov 2003, Frederic Thomas wrote:

> Hello,
>
> I've the following code :
>
>         ...
>         ByteArrayInputStream    is = new
> ByteArrayInputStream(str.getBytes());
>         prepStatement.setBinaryStream(1, is, str.getBytes().length); //
can
> be UTF-8
>         ...
>
> assuming that prepStatement is a correct query that updates a row
containing
> a TEXT field, in column 1, and str represents a Unicode string to store in
> this TEXT field. When running this exact code with PostgreSQL 7.2 driver
> using the "?compatible=7.1" switch, it was working just fine when called
> with an empty str (str = ""). When I ported this application to use
> PostgreSQL 7.3 driver without the "?compatible=7.1", this code produces a
> java.lang.NegativeArraySizeException on the
prepStatement.setBinaryStream()
> line.
>
> FYI, I noted that I had to change OID to BYTEA in my schema for the BLOBs
in
> order to upgrade from 7.1 to 7.3 compatibility mode, but didn't see
anything
> regarding TEXT fields (CLOB). I can also add that I tried all the
different
> 7.3 drivers as well as the latest 7.4 dev driver with the exact same
error.
> Finally, I couldn't find, in the Java 1.3 documentation, anything
regarding
> the second and third parameters of PreparedStatement.setBinaryStream()
> which, to me, can be null and 0 respectively.
>

I think the real question is: why are you calling setBinaryStream on a
text field?  Shouldn't you just do:  prepStatement.setString(1,str);
instead of going through the BinaryStream?

In any case the driver shouldn't throw an Exception like that.  Here's a
patch that fixes that.

Kris Jurka



pgsql-jdbc by date:

Previous
From: Kris Jurka
Date:
Subject: Re: java.lang.NegativeArraySizeException at
Next
From: Kris Jurka
Date:
Subject: Re: java.lang.NegativeArraySizeException at