使用 Slick/Scala 将日期和时间存储到 MySQL
Storing date and time into MySQL using Slick/Scala
我遇到了一个看起来很简单的问题,希望有一个简单的解决方案。但是我还没有找到。
我在 MySQL 中的属性是 DATE 和 TIMESTAMP 类型。
这些是我的圆滑 类:
case class Event (
id: Long, name: String, category: String, date: Date, venue: String, startTime: Date, endTime: Date, description: String, admission: String, addInfo: Option[String])
class Events(tag: Tag) extends Table[Event](tag, "EVENT") {
implicit val dateColumnType = MappedColumnType.base[Date, Long](d => d.getTime, d => new Date(d))
def id = column[Long]("ID", O.PrimaryKey)
def name = column[String]("NAME")
def category = column[String]("CATEGORY")
def date = column[Date]("DATE")
def venue = column[String]("VENUE")
def startTime = column[Timestamp]("START_TIME")
def endTime = column[Timestamp]("END_TIME")
def description = column[String]("DESCRIPTION")
def admission = column[String]("ADMISSION")
def addInfo = column[String]("ADD_INFO")
def * = (id, name, category, date, venue, startTime, endTime, description, admission, addInfo.?) <> (Event.tupled, Event.unapply _)
}
出于某种原因,我无法让它工作。主要问题似乎是如何将 java.util.Date 存储到 MySQL.
中的 DATE 和 TIMESTAMP 类型中
有人可以建议如何最好地做到这一点吗?我是 Scala/Slick 世界的新手。
你看过了吗slick-joda-wrapper? You may also want to checkout more Scala friendly wrapper around Joda too: https://github.com/nscala-time/nscala-time
您想将 java.util.Date 存储到 MySQL 中的 DATE 和 TIMESTAMP 类型,因此您需要定义转换:
1) java.util.Date => java.sql.Date
2) java.util.Date => java.sql.Timestamp
class Events(tag: Tag) extends Table[Event](tag, "EVENT") {
def id = column[Long]("ID", O.PrimaryKey)
def name = column[String]("NAME")
def category = column[String]("CATEGORY")
def date = column[Date]("DATE")(DateMapper.utilDate2SqlDate)
def venue = column[String]("VENUE")
def startTime = column[Date]("START_TIME") (DateMapper.utilDate2SqlTimestampMapper)
def endTime = column[Date]("END_TIME")(DateMapper.utilDate2SqlTimestampMapper)
def description = column[String]("DESCRIPTION")
def admission = column[String]("ADMISSION")
def addInfo = column[Option[String]]("ADD_INFO")
def * = (id, name, category, date, venue, startTime, endTime, description, admission, addInfo) <> (Event.tupled, Event.unapply)
}
object DateMapper {
val utilDate2SqlTimestampMapper = MappedColumnType.base[java.util.Date, java.sql.Timestamp](
{ utilDate => new java.sql.Timestamp(utilDate.getTime()) },
{ sqlTimestamp => new java.util.Date(sqlTimestamp.getTime()) })
val utilDate2SqlDate = MappedColumnType.base[java.util.Date, java.sql.Date](
{ utilDate => new java.sql.Date(utilDate.getTime()) },
{ sqlDate => new java.util.Date(sqlDate.getTime()) })
}
我遇到了一个看起来很简单的问题,希望有一个简单的解决方案。但是我还没有找到。
我在 MySQL 中的属性是 DATE 和 TIMESTAMP 类型。 这些是我的圆滑 类:
case class Event (
id: Long, name: String, category: String, date: Date, venue: String, startTime: Date, endTime: Date, description: String, admission: String, addInfo: Option[String])
class Events(tag: Tag) extends Table[Event](tag, "EVENT") {
implicit val dateColumnType = MappedColumnType.base[Date, Long](d => d.getTime, d => new Date(d))
def id = column[Long]("ID", O.PrimaryKey)
def name = column[String]("NAME")
def category = column[String]("CATEGORY")
def date = column[Date]("DATE")
def venue = column[String]("VENUE")
def startTime = column[Timestamp]("START_TIME")
def endTime = column[Timestamp]("END_TIME")
def description = column[String]("DESCRIPTION")
def admission = column[String]("ADMISSION")
def addInfo = column[String]("ADD_INFO")
def * = (id, name, category, date, venue, startTime, endTime, description, admission, addInfo.?) <> (Event.tupled, Event.unapply _)
}
出于某种原因,我无法让它工作。主要问题似乎是如何将 java.util.Date 存储到 MySQL.
中的 DATE 和 TIMESTAMP 类型中有人可以建议如何最好地做到这一点吗?我是 Scala/Slick 世界的新手。
你看过了吗slick-joda-wrapper? You may also want to checkout more Scala friendly wrapper around Joda too: https://github.com/nscala-time/nscala-time
您想将 java.util.Date 存储到 MySQL 中的 DATE 和 TIMESTAMP 类型,因此您需要定义转换:
1) java.util.Date => java.sql.Date
2) java.util.Date => java.sql.Timestamp
class Events(tag: Tag) extends Table[Event](tag, "EVENT") {
def id = column[Long]("ID", O.PrimaryKey)
def name = column[String]("NAME")
def category = column[String]("CATEGORY")
def date = column[Date]("DATE")(DateMapper.utilDate2SqlDate)
def venue = column[String]("VENUE")
def startTime = column[Date]("START_TIME") (DateMapper.utilDate2SqlTimestampMapper)
def endTime = column[Date]("END_TIME")(DateMapper.utilDate2SqlTimestampMapper)
def description = column[String]("DESCRIPTION")
def admission = column[String]("ADMISSION")
def addInfo = column[Option[String]]("ADD_INFO")
def * = (id, name, category, date, venue, startTime, endTime, description, admission, addInfo) <> (Event.tupled, Event.unapply)
}
object DateMapper {
val utilDate2SqlTimestampMapper = MappedColumnType.base[java.util.Date, java.sql.Timestamp](
{ utilDate => new java.sql.Timestamp(utilDate.getTime()) },
{ sqlTimestamp => new java.util.Date(sqlTimestamp.getTime()) })
val utilDate2SqlDate = MappedColumnType.base[java.util.Date, java.sql.Date](
{ utilDate => new java.sql.Date(utilDate.getTime()) },
{ sqlDate => new java.util.Date(sqlDate.getTime()) })
}