Found the solution myself:

Instead of

prepareStatement.setObject(2, new Date());

one can explicitly tell JDBC that this object has to be handled as
type Java Object:

prepareStatement.setObject(2, new Date(), Types.JAVA_OBJECT);

Works now as expected...

On 22 Jun., 15:04, "A. Christian" <[email protected]> wrote:
> Hi there,
>
> I'm creating a kind of POJO persistence API with H2 as the backend.
> But I'm facing the following error when I try to set a java.util.Date
> object into a "other" column:
>
> ----
> Exception in thread "main" org.h2.jdbc.JdbcSQLException: Hexadezimal
> Zahl mit einer ungeraden Anzahl Zeichen: "2012-06-22 14:57:36.885"
> Hexadecimal string with odd number of characters: "2012-06-22
> 14:57:36.885"; SQL statement:
> INSERT INTO test VALUES (?,?) -- (?1, ?2) [90003-166]
>         at org.h2.message.DbException.getJdbcSQLException(DbException.java:
> 329)
>         at org.h2.message.DbException.get(DbException.java:169)
>         at org.h2.message.DbException.get(DbException.java:146)
>         at org.h2.util.StringUtils.convertHexToBytes(StringUtils.java:990)
>         at org.h2.value.Value.convertTo(Value.java:823)
>         at org.h2.table.Column.convert(Column.java:143)
>         at org.h2.command.dml.Insert.insertRows(Insert.java:112)
>         at org.h2.command.dml.Insert.update(Insert.java:84)
>         at org.h2.command.CommandContainer.update(CommandContainer.java:73)
>         at org.h2.command.Command.executeUpdate(Command.java:226)
>         at
> org.h2.jdbc.JdbcPreparedStatement.execute(JdbcPreparedStatement.java:
> 181)
>         at de.root1.sos.SqlTest.main(SqlTest.java:30)
> ----
>
> Sample to reproduce this issue:
>
> ----
> package de.root1.sos;
>
> import java.sql.Connection;
> import java.sql.DriverManager;
> import java.sql.PreparedStatement;
> import java.sql.SQLException;
> import java.sql.Statement;
> import java.util.Date;
> import java.util.UUID;
>
> public class SqlTest {
>     public static void main(String[] args) throws SQLException {
>         String jdbcUrl = "jdbc:h2:/tmp/test;FILE_LOCK=SERIALIZED";
>         Connection connection = DriverManager.getConnection(jdbcUrl,
> "sa", "");
>         Statement createTableStmnt = connection.createStatement();
>         createTableStmnt.executeUpdate("CREATE TABLE test (id UUID
> PRIMARY KEY, dateObject OTHER);");
>         PreparedStatement prepareStatement =
> connection.prepareStatement("INSERT INTO test VALUES (?,?)");
>         prepareStatement.setObject(1, UUID.randomUUID());
>         prepareStatement.setObject(2, new Date());
>         prepareStatement.execute();
>     }}
>
> ----
>
> What's wrong with the code?
>
> I know, it would be somehow better to use the "DATE" type for storing
> dates, but for this scenario I need "OTHER" type (Object) ...
>
> Any ideas?
>
> br,
> Alex

-- 
You received this message because you are subscribed to the Google Groups "H2 
Database" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/h2-database?hl=en.

Reply via email to