Okay, we can rejoice. I just checked the java.sql.Timestamp source code and the 
stored strings are referenced to UTC.

-Adrian

--- On Thu, 7/1/10, Adrian Crum <[email protected]> wrote:

> From: Adrian Crum <[email protected]>
> Subject: Re: svn commit: r959868 - 
> /ofbiz/trunk/framework/entity/src/org/ofbiz/entity/jdbc/JdbcValueHandler.java
> To: [email protected], "Jacques Le Roux" <[email protected]>
> Date: Thursday, July 1, 2010, 11:47 PM
> Let's not rejoice just yet. There
> might be time zone issues. I'm thinking we might need to
> reference UTC in the Timestamp/String conversions.
> 
> -Adrian
> 
> --- On Thu, 7/1/10, Jacques Le Roux <[email protected]>
> wrote:
> 
> > From: Jacques Le Roux <[email protected]>
> > Subject: Re: svn commit: r959868 -
> /ofbiz/trunk/framework/entity/src/org/ofbiz/entity/jdbc/JdbcValueHandler.java
> > To: [email protected]
> > Date: Thursday, July 1, 2010, 11:41 PM
> > Nice!
> > 
> > Jacques
> > 
> > From: <[email protected]>
> > > Author: adrianc
> > > Date: Fri Jul  2 06:28:14 2010
> > > New Revision: 959868
> > > 
> > > URL: http://svn.apache.org/viewvc?rev=959868&view=rev
> > > Log:
> > > Small enhancement to JdbcValueHandler: add
> support for
> > sub-second Timestamp precision on databases that
> don't
> > support it.
> > > 
> > > If a user chooses to do so, they can assign the
> > date-time field type to a CHAR(30) SQL type. This
> will
> > enable sub-second Timestamp precision on databases
> that
> > don't support it.
> > > 
> > > The Timestamp will be stored as a string in JDBC
> > Timestamp format (yyyy-mm-dd hh:mm:ss.fffffffff).
> Date/time
> > comparisons can still be performed in SQL statements,
> but
> > any date/time functions performed on the field will
> fail.
> > Users could create UDFs to mimic those functions.
> > > 
> > > In addition, the CHAR(30) field will consume
> more
> > storage space than a native Timestamp field (usually
> 8
> > bytes).
> > > 
> > > It will be up to the user to decide if they want
> to
> > use this feature. If used in a pure OFBiz
> environment,
> > everything should work as expected.
> > > 
> > > Modified:
> > >   
> >
> ofbiz/trunk/framework/entity/src/org/ofbiz/entity/jdbc/JdbcValueHandler.java
> > > 
> > > Modified:
> >
> ofbiz/trunk/framework/entity/src/org/ofbiz/entity/jdbc/JdbcValueHandler.java
> > > URL: 
> > > http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/jdbc/JdbcValueHandler.java?rev=959868&r1=959867&r2=959868&view=diff
> > >
> >
> ==============================================================================
> > > ---
> >
> ofbiz/trunk/framework/entity/src/org/ofbiz/entity/jdbc/JdbcValueHandler.java
> > (original)
> > > +++
> >
> ofbiz/trunk/framework/entity/src/org/ofbiz/entity/jdbc/JdbcValueHandler.java
> > Fri Jul  2 06:28:14 2010
> > > @@ -29,6 +29,7 @@ import java.sql.Blob;
> > > import java.sql.PreparedStatement;
> > > import java.sql.ResultSet;
> > > import java.sql.SQLException;
> > > +import java.sql.Timestamp;
> > > import java.sql.Types;
> > > import java.util.Map;
> > > 
> > > @@ -698,6 +699,11 @@ public abstract class
> > JdbcValueHandler {
> > > 
> > >     /**
> > >      * A
> > <code>java.sql.Timestamp</code> JDBC
> value
> > handler.
> > > +     * <p>This
> > <code>JdbcValueHandler</code>
> accommodates
> > databases that
> > > +     * don't support sub-second
> > precision. If the date-time field type
> > > +     * is a
> > <code>CHAR(30)</code> SQL type,
> > <code>java.sql.Timestamp</code>s
> > > +     * will be stored as JDBC
> > escape strings
> > > +     * (<code>yyyy-mm-dd
> > hh:mm:ss.fffffffff</code>).</p>
> > >      */
> > >     protected static class
> > TimestampJdbcValueHandler extends JdbcValueHandler {
> > >         protected
> > TimestampJdbcValueHandler(int jdbcType) {
> > > @@ -713,7 +719,22 @@ public abstract class
> > JdbcValueHandler {
> > >         }
> > >       �...@override
> > >         protected
> > JdbcValueHandler newInstance(int sqlType) {
> > > -            return new
> > TimestampJdbcValueHandler(sqlType);
> > > +            if (sqlType
> > == Types.CHAR) {
> > > +             
> >   return new TimestampJdbcValueHandler(sqlType) {
> > > +             
> >       protected void
> > castAndSetValue(PreparedStatement ps, int
> parameterIndex,
> > Object obj) throws SQLException {
> > > +             
> >          
> > ps.setString(parameterIndex, ((java.sql.Timestamp)
> > obj).toString());
> > > +             
> >       }
> > > +             
> >       public Object getValue(ResultSet rs,
> > int columnIndex) throws SQLException {
> > > +             
> >           String str =
> > rs.getString(columnIndex);
> > > +             
> >           if (str == null) {
> > > +             
> >               return
> > null;
> > > +             
> >           }
> > > +             
> >           return
> > Timestamp.valueOf(str);
> > > +             
> >       }
> > > +             
> >   };
> > > +            } else {
> > > +             
> >   return new TimestampJdbcValueHandler(sqlType);
> > > +            }
> > >         }
> > >     }
> > > }
> > > 
> > > 
> > 
> > 
> > 
> 
> 
>   
> 


   

Reply via email to