我是Slick的新手。我正在使用mysql,我正在尝试从数据库中检索一些日期时间。这是我的导入
import slick.driver.MySQLDriver.simple._
import scala.slick.driver._
import java.util.Date
这里是映射为
的类的行def creationDate = column[Date]("creation_date")
但我收到此错误
找不到参数tt的隐含值:slick.ast.TypedType [java.util.Date]
有没有办法在不使用String的情况下将日期时间从mysql导入java.util.Date?
谢谢
答案 0 :(得分:6)
您无法在列中使用 java.util.Date
的原因是
在Slick中不支持它,请参阅Table Rows部分中的documentation。
JdbcProfile中基于JDBC的数据库开箱即用,支持以下原始类型(由各个数据库驱动程序强加某些限制): 日期类型:java.sql.Date,java.sql.Time,java.sql.Timestamp
因此,没有提供隐式TypedType [C]。
def column[C](n: String, options: ColumnOption[C]*)
(implicit tt: TypedType[C]): Rep[C] = {
如果您尝试查找TypedType的子项,您会在 slick.driver.JdbcTypesComponent
中找到三个与时间相关的课程。
DateJdbcType for java.sql.Date
TimestampJdbcType for java.sql.Timestamp
TimeJdbcType for java.sql.Time
此外,定义的类型符合文档中所述的内容,三种与时间相关的类型。
我在程序中使用 Timestamp
和 Slick 3.0 ,如下所示:
import slick.driver.MySQLDriver.api._
import java.sql.Timestamp
case class Temp(creation_date: Timestamp)
class Tests(tag: Tag) extends Table[Temp](tag, "tests") {
def creationDate = column[Timestamp]("creation_date")
def * = creationDate <> ((creationDate: Timestamp) =>
Temp.apply(creationDate), Temp.unapply _)
}
通过这种方式,您只需将时间戳转换为您想要来回的任何时间相关类型,但这应该没什么大不了的。
无论如何,希望它有所帮助。
答案 1 :(得分:4)
你试过Joda-Time吗?
如果没有,你应该认真考虑一下。它有一个光滑的映射器项目https://github.com/tototoshi/slick-joda-mapper
import org.joda.time.DateTime
import com.github.tototoshi.slick.MySQLJodaSupport._
// then it works just the same
def creationDate = column[DateTime]("creation_date")
答案 2 :(得分:3)
如果要按原样使用java.util.Date, 将映射日期类型创建为Timestamp。
import slick.driver.MySQLDriver.api._
import java.util.Date
import java.sql.Timestamp
implicit def mapDate = MappedColumnType.base[Date, Timestamp](
d => new Timestamp(d.getTime),
identity
)