Re: Timestamp problems - Mailing list pgsql-jdbc

From Peter Katzmann
Subject Re: Timestamp problems
Date
Msg-id 20030208164255.1ixbasveee4g0@.thiesen.com
Whole thread Raw
In response to Timestamp problems  (Peter Katzmann <p.katzmann@thiesen.com>)
List pgsql-jdbc
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. But anyway, why is the timestamp manipulated.
Didn't i understand it right that the timezone offset to gmt has to be added at
the end, and here it should be +1 one and not +0

peter

Barry Lind <blind@xythos.com> schrieb:

> 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
>
>




--
Peter Katzmann


pgsql-jdbc by date:

Previous
From: Christopher Elkins
Date:
Subject: Re: Datasource and tomcat, Postgresql 7.4, jkd1.4.1 --
Next
From: Jeremiah Jahn
Date:
Subject: create BLOB question