problem with types in new jdbc driver - Mailing list pgsql-jdbc

From Jason Tesser
Subject problem with types in new jdbc driver
Date
Msg-id 1119358451.5337.3.camel@jtessermain
Whole thread Raw
Responses Re: problem with types in new jdbc driver  (Roland Walter <rwa@mosaic-ag.com>)
Re: problem with types in new jdbc driver  (Dave Cramer <pg@fastcrypt.com>)
List pgsql-jdbc
I had posted this on the main postgres list and here is what Richard
Huxton said.  I was wondering if one you you guys could shed some more
light on this for me.  What has changed between the 7.4 driver and the
8.0 driver to cause this problem?

Jason Tesser wrote:
> Hi Richard and thank you for your help.  Here is the actual message
from
> the pg log
>
> ERROR:  42804: column "datetimein" is of type timestamp without time
> zone but expression is of type character varying
> HINT:  You will need to rewrite or cast the expression.
>
> I can aviod this by rewritting my queries and casting all the stuff
> though I don't want to have to do this.  I am trying to figure out
what
> is happening so I can find a proper solution, like I said this all
> worked with pg 7.4

Are you sure the issue is the change from PG7.4=>PG8.0, or have you
upgraded your jdbc package at the same time?

> Here is my prepared statment in my java class
>
>   private static final String MANUALINSERT =
>       "insert into pactime (datetimein, pacpayperiodlink, wslink,
> deptlink, commment, type) " +
>       "values ?,?,?,?,?,'man') ";

> and here si the way to fix but there are too many queires to have to
> change them all.
>
>   private static final String MANUALINSERT =
>       "insert into pactime (datetimein, pacpayperiodlink, wslink,
> deptlink, commment, type) " +
>       "values (cast(? as timestamp),?,?,?,?,'man') ";

> here is where I am executing the statement in java
>
>         stmt = con.prepareStatement(DATEOUTUPDATE);
>         stmt.setString(1, dateout);
>         stmt.setString(2, comment);
>         stmt.setString(3, pactimeid);

Hmm - should this not be something like:
   stmt.setTimestamp(1,dateout) / stmt.setDateTime(1,dateout)

You'll have to consider the fact that I don't really do Java, but I'm
guessing the "setString" has been tightened up in recent JDBC releases
to mean "varchar" rather than just "quoted-undefined". There must be an
equivalent method for timestamps.

As a workaround, consider downgrading your jdbc (if you've upgraded
it),
or using an older protocol version (sorry, don't know how to specify
this with jdbc).

--
   Richard Huxton
   Archonet Ltd


pgsql-jdbc by date:

Previous
From: Oliver Jowett
Date:
Subject: Re: prepareCall hangs
Next
From: Roland Walter
Date:
Subject: Re: problem with types in new jdbc driver