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.
