1
votes

I'm trying to insert a simple java.util.Date into MySQL TIMESTAMP field slick 3 and plain query.

sqlu"""INSERT INTO Table
     (name, date)
  VALUES
     (${obj.name}, ${obj.date})"""

It works perfectly when I just insert the String value.

I found many explanations of an implicit conversion and put:

implicit val JavaUtilDateMapper =
  MappedColumnType .base[java.util.Date, java.sql.Timestamp] (
    d => new java.sql.Timestamp(d.getTime),
    d => new java.util.Date(d.getTime))

sqlu"""INSERT INTO Table
     (name, date)
  VALUES
     (${obj.name}, ${obj.date})"""
db.run(sqlu)

But I'm still getting error: Error:(57, 5) could not find implicit value for parameter e: slick.jdbc.SetParameter[java.util.Date] sqlu"""INSERT INTO Table...

What should I do?

Thank you

1

1 Answers

2
votes

Instead of providing the implicit conversion from java.util.Date to java.sql.Timestamp and insert java.sql.Timestamp directly

sqlu"""INSERT INTO Table
     (name, date)
  VALUES
     (${obj.name}, ${new Timestamp(obj.date.getTime)})"""

db.run(sqlu)

or Provide scala implicit def

implicit def toSQLTime(date: java.util.Date): java.sql.Timestamp = new java.sql.Timestamp(date.getTime)

 sqlu"""INSERT INTO Table
         (name, date)
      VALUES
         (${obj.name}, ${obj.date: java.sql.Timestamp})"""

    db.run(sqlu)