Re: Timestamp problems - Mailing list pgsql-jdbc

From Peter Katzmann
Subject Re: Timestamp problems
Date
Msg-id 3E4755B2.1010405@thiesen.com
Whole thread Raw
In response to Re: Timestamp problems  (Barry Lind <blind@xythos.com>)
Responses Re: Timestamp problems  (Barry Lind <blind@xythos.com>)
List pgsql-jdbc
Barry,
the problem is that hibernate does this mapping.
I have the data stored as date and wan't to get the Calendar type, this one
will mapped to timestamp.
For my understanding it should be no problem to convert a date to timestamp
and back. The date should always be the same, shouldn't it ?
Both represent a Calendar Date.

peter

Barry Lind wrote:
> Peter,
>
> I looked at the sample program you sent (thanks for the test program, it
> makes it much easier to understand).  From what I can tell the driver is
> working correctly.
>
> The data type of the column datum that you create is 'date'.  Since a
> 'date' does not store any time information the rest of the behavior you
> see is related to this fact.
>
> So why are you using setTimestamp/getTimestamp when the data type is
> date?  You should be using setDate/getDate.
>
> If I either change the data type to 'timestamp' in your program, or use
> getDate/setDate with the 'date' data type everything works as I would
> expect.
>
> The fact that you are mixing dates and timestamps I think is causing
> your problems.  However I believe the driver is functioning correctly
> givin what your code is actually doing.
>
> thanks,
> --Barry
>
> Peter Katzmann wrote:
>
>> Hello Attached is the example with the same error and here is a small
>> database log:
>> 2003-02-07 14:32:32 [17354]  LOG:  connection received:
>> host=192.168.2.11 port=33900
>> 2003-02-07 14:32:32 [17354]  LOG:  connection authorized:
>> user=postgres database=achievo
>> 2003-02-07 14:32:32 [17354]  LOG:  query: set datestyle to 'ISO';
>> select version(), case when pg_encoding_to_char(1) = 'SQL_ASCII' then
>> 'UNKNOWN' else getdatabaseencoding() end;
>> 2003-02-07 14:32:32 [17354]  LOG:  query: create temp table tmp (
>> datum date, idx int)
>> 2003-02-07 14:32:32 [17354]  LOG:  query: insert into tmp
>> Values('2003-02-07 13:32:31.668000000+00', 0)
>> 2003-02-07 14:32:32 [17354]  LOG:  query: insert into tmp
>> Values('2003-02-07 13:32:31.913000000+00', 1)
>> 2003-02-07 14:32:32 [17354]  LOG:  query: insert into tmp
>> Values('2003-02-07 13:32:31.916000000+00', 2)
>> 2003-02-07 14:32:32 [17354]  LOG:  query: insert into tmp
>> Values('2003-02-07 13:32:31.919000000+00', 3)
>> 2003-02-07 14:32:32 [17354]  LOG:  query: insert into tmp
>> Values('2003-02-07 13:32:31.921000000+00', 4)
>> 2003-02-07 14:32:32 [17354]  LOG:  query: insert into tmp
>> Values('2003-02-07 13:32:31.923000000+00', 5)
>> 2003-02-07 14:32:32 [17354]  LOG:  query: insert into tmp
>> Values('2003-02-07 13:32:31.926000000+00', 6)
>> 2003-02-07 14:32:32 [17354]  LOG:  query: insert into tmp
>> Values('2003-02-07 13:32:31.928000000+00', 7)
>> 2003-02-07 14:32:32 [17354]  LOG:  query: insert into tmp
>> Values('2003-02-07 13:32:31.939000000+00', 8)
>> 2003-02-07 14:32:32 [17354]  LOG:  query: insert into tmp
>> Values('2003-02-07 13:32:31.941000000+00', 9)
>> 2003-02-07 14:32:32 [17354]  LOG:  query: select * from tmp
>> 2003-02-07 14:32:32 [17354]  LOG:  query: update tmp set
>> datum='2003-02-06 23:00:00.000000000+00' where idx=0
>> 2003-02-07 14:32:32 [17354]  LOG:  query: update tmp set
>> datum='2003-02-06 23:00:00.000000000+00' where idx=1
>> 2003-02-07 14:32:32 [17354]  LOG:  query: update tmp set
>> datum='2003-02-06 23:00:00.000000000+00' where idx=2
>> 2003-02-07 14:32:32 [17354]  LOG:  query: update tmp set
>> datum='2003-02-06 23:00:00.000000000+00' where idx=3
>> 2003-02-07 14:32:32 [17354]  LOG:  query: update tmp set
>> datum='2003-02-06 23:00:00.000000000+00' where idx=4
>> 2003-02-07 14:32:32 [17354]  LOG:  query: update tmp set
>> datum='2003-02-06 23:00:00.000000000+00' where idx=5
>> 2003-02-07 14:32:32 [17354]  LOG:  query: update tmp set
>> datum='2003-02-06 23:00:00.000000000+00' where idx=6
>> 2003-02-07 14:32:32 [17354]  LOG:  query: update tmp set
>> datum='2003-02-06 23:00:00.000000000+00' where idx=7
>> 2003-02-07 14:32:32 [17354]  LOG:  query: update tmp set
>> datum='2003-02-06 23:00:00.000000000+00' where idx=8
>> 2003-02-07 14:32:32 [17354]  LOG:  query: update tmp set
>> datum='2003-02-06 23:00:00.000000000+00' where idx=9
>>
>>
>> Barry Lind wrote:
>>
>>> Peter,
>>>
>>> When you say you tried with the current version what do you mean?
>>> Specifically have you tried the latest 7.3 build from
>>> jdbc.postgresql.org?  There were some recent bug fixes in this area
>>> that I think may fix your problem.
>>>
>>> If the current code still has this problem, can you submit a test
>>> case that we can compile and run that demonstrates the problem?
>>>
>>> thanks,
>>> --Barry
>>>
>>>
>>> Peter Katzmann wrote:
>>>
>>>> High,
>>>> i' currently working with hibernate. They represent Calendar types as
>>>> timestamps. During prepareStatement and setTimestamp the data
>>>> generated for
>>>> the query has a modified date. The date is something original:
>>>>
>>>>
>>>> insert into hours  ( entrydate, activitydate, remark, time, userid,
>>>> checked,
>>>> phaseid, activityid, zkub, id ) values  '2003-02-06
>>>> 11:11:29.338000000+00',
>>>> '2003-02-06 11:11:29.338000000+00', 'öfölsdajklö', 120, 'pk1057',
>>>> 'f', null,
>>>> null, null, 12747 )
>>>>
>>>>
>>>> And this will be aftter the data was read back, the checked flag
>>>> changed and
>>>> wrote back
>>>>
>>>> update hours set entrydate = '2003-02-05 23:00:00.000000000+00',
>>>> activitydate
>>>> = '2003-02-05 23:00:00.000000000+00', remark = 'öfölsdajklö', time =
>>>> 120,
>>>> userid = 'pk1057', checked = 't', phaseid = 5, activityid = 3, zkub
>>>> = ' '
>>>> where id = 12747
>>>>
>>>> First occured the problem with postgres 7.2 so i updated to a
>>>> current version,
>>>> but no go either.
>>>>
>>>>
>>>> peter
>>>>
>>>>
>>>>
>>>> ---------------------------(end of
>>>> broadcast)---------------------------
>>>> TIP 5: Have you checked our extensive FAQ?
>>>>
>>>> http://www.postgresql.org/users-lounge/docs/faq.html
>>>>
>>>>
>>>
>>>
>>>
>>>
>>> ---------------------------(end of broadcast)---------------------------
>>> TIP 2: you can get off all lists at once with the unregister command
>>>    (send "unregister YourEmailAddressHere" to majordomo@postgresql.org)
>>>
>>
>>
>>
>> ------------------------------------------------------------------------
>>
>> /*
>>  * TryOut.java
>>  *
>>  * Created on 7. Februar 2003, 13:36
>>  */
>>
>> import java.sql.*;
>>
>>
>> /**
>>  *
>>  * @author  root
>>  */
>> public class TryOut {
>>   private java.sql.Connection dbConnection = null;
>>     /** Die URL zur Datenbank */
>>   private String dbURL = null;
>>   /** Der Datenbank-Banutzer */
>>   private String dbUser = null;
>>   /** Das Password des Datenbank-Benutzers */
>>   private String dbPasswd = null;
>>   /***********************
>>    * simple table of the form
>>    *
>>    *
>>    * /** Creates a new instance of TryOut */
>>   public TryOut() {
>>   }
>>     /**
>>    * @param args the command line arguments
>>    */
>>   public static void main(String[] args) {
>>     TryOut tr = new TryOut();
>>     tr.doIt();
>>   }
>>     private void doIt() {
>>     try {
>>       Class.forName("org.postgresql.Driver");
>>
>> dbConnect("jdbc:postgresql://kontor.thiesen.de:5432/achievo?charSet=ISO-8859-15",
>> "postgres", "postgres");
>>       Statement state = dbConnection.createStatement();
>>       state.execute("create temp table tmp ( datum date, idx int)");
>>       PreparedStatement st1 = dbConnection.prepareStatement("insert
>> into tmp Values(?, ?)");
>>       PreparedStatement st2 = dbConnection.prepareStatement("update
>> tmp set datum=? where idx=?");
>>             for (int i = 0; i < 10; i++) {
>>         st1.setInt(2, i);
>>         st1.setTimestamp(1,new Timestamp(new
>> java.util.Date().getTime()));
>>         st1.execute();
>>       }
>>       ResultSet rs = state.executeQuery("select * from tmp");
>>       for (int i = 0; i < 10; i++) {
>>         rs.absolute(i+1);
>>         st2.setTimestamp(1, new Timestamp(rs.getDate(1).getTime()));
>>         st2.setInt(2, i);
>>         st2.execute();
>>       }
>>       dbConnection.close();
>>     } catch (Exception e) {
>>       e.printStackTrace();
>>     }
>>   }
>>      /* Oeffnet die Datenbankverbindung
>>     *
>>     * @param dbUrl die JDBC-RessourcenURL
>>     * @param dbUser dbUser
>>     * @param dbPasswd
>>     *
>>     * @exception SQLException noch Fragen?
>>     */
>>       public void dbConnect(String dbURL, String dbUsr, String dbPwd)  {
>>     this.dbURL = dbURL;
>>     this.dbUser = dbUsr;
>>     this.dbPasswd = dbPwd;
>>         dbConnect();
>>   }
>>     /**
>>    * Oeffnet die Datenbankverbindung
>>    *
>>    * @param dbUrl die JDBC-RessourcenURL
>>    * @param dbUser dbUser
>>    * @param dbPasswd
>>    *
>>    * @exception SQLException noch Fragen?
>>    */
>>   private void dbConnect() {
>>     /* Verbindung zur Datenbank aufbauen */
>>     //        getMainSession().getDebug().message(this,
>> "DriverManager.getConnection() "+dbURL+" "+dbUser+" ********");
>>     System.out.println( "DriverManager.getConnection() "+dbURL+"
>> "+dbUser+" ********");
>>     try {
>>       this.dbConnection = DriverManager.getConnection(dbURL, dbUser,
>> dbPasswd);
>>     } catch (SQLException se) {
>>       se.printStackTrace();
>>     }
>>         try {
>>       DatabaseMetaData dmd = dbConnection.getMetaData();
>>       String dbi = new String();
>>             dbi = dbi.concat("---            database:
>> "+dmd.getDatabaseProductName()+"\n");
>>       dbi = dbi.concat("---     databse version:
>> "+dmd.getDatabaseProductVersion()+"\n");
>>       dbi = dbi.concat("---    JDBC driver name:
>> "+dmd.getDriverName()+"\n");
>>       dbi = dbi.concat("--- JDBC driver version:
>> "+dmd.getDriverVersion());
>>       //getMainSession().getDebug().message(this, "Database
>> Info:\n"+dbi);
>>       System.out.println( "Database Info:\n"+dbi);
>>     } catch (SQLException se) {
>>       se.printStackTrace();
>>     }
>>       }
>>   }
>
>
>
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 3: if posting/reading through Usenet, please send an appropriate
> subscribe-nomail command to majordomo@postgresql.org so that your
> message can get through to the mailing list cleanly
>


--
Thiesen hardware & software GmbH | P. Katzmann
Bereichsleiter SW Entwicklung    | p.katzmann@thiesen.com
Im Tiegel 9              | www.thiesen.com
36367 Wartenberg         | tel. +49 (0) 6641 979 140  fax +49 (0) 6641 979 299


pgsql-jdbc by date:

Previous
From: "David Hu"
Date:
Subject: Display Problem.
Next
From: Felipe Schnack
Date:
Subject: Strange error