On Thu, 2 Sep 2010, Jochen Terstiege wrote:
The following bug has been logged online:
Bug reference: 5637
Description:JDBC driver method setClob always uses getAsciiStream()
Details:
Using driver: postgresql-8.4-701.jdbc3.jar
The method setClob() in the AbstractJdbc2Statement calls the method
getAsciiStream() on the provided Clob.
This leads to problems if the given Clob contains an UTF-8 encoded string.
Should the driver call getCharacterStream() instead? Can this problem be
solved in a different way?
The issue here is that postgresql doesn't have a real Clob type on the
server, only a Blob type (and even that has some quirks). So the JDBC
driver allows you to retrieve a large object as either a Blob or a Clob.
This means that the data the driver gets is a simple binary stream with
no encoding information.
The JDBC driver uses getAsciiStream because it returns an InputStream
which does not have to deal with encoding conversion which could fail
because it doesn't know the source data's encoding. This is
important so that it can faithfully reproduce an arbitrary PG Clob.
Your complaint is that this doesn't work when passed a non-PG Clob. I
suppose we could try to inspect the Clob to determine if it was a PG Clob
or not and choose different methods based on that determination.
Kris Jurka
--
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs