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