Re: problem with types in new jdbc driver

Поиск
Список
Период
Сортировка
От Dave Cramer
Тема Re: problem with types in new jdbc driver
Дата
Msg-id 3D44E351-3D0D-44E1-995E-0F83B33662BE@fastcrypt.com
обсуждение исходный текст
Ответ на problem with types in new jdbc driver  (Jason Tesser <jtesser@nbbc.edu>)
Список pgsql-jdbc
Richard is correct you need to use setTimestamp, setString is used if
the underlying data is a string.

Dave
On 21-Jun-05, at 8:54 AM, Jason Tesser wrote:

> 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
>
>
> ---------------------------(end of
> broadcast)---------------------------
> TIP 4: Don't 'kill -9' the postmaster
>
>


В списке pgsql-jdbc по дате отправления:

Предыдущее
От: Roland Walter
Дата:
Сообщение: Re: problem with types in new jdbc driver
Следующее
От: Tristan Tarrant
Дата:
Сообщение: Bug in JDBC driver w/BLOBs