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); > > + } > > } > > } > > } > > > > > > >
