problem with types in new jdbc driver

From: Jason Tesser <jtesser(at)nbbc(dot)edu>
To: pgsql-jdbc(at)postgresql(dot)org
Subject: problem with types in new jdbc driver
Date: 2005-06-21 12:54:10
Message-ID: 1119358451.5337.3.camel@jtessermain
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: 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

Responses

Browse pgsql-jdbc by date

  From Date Subject
Next Message Roland Walter 2005-06-21 13:15:59 Re: problem with types in new jdbc driver
Previous Message Oliver Jowett 2005-06-21 00:19:59 Re: prepareCall hangs