使用 java.util.Date 与 Slick 3.1.0-M1
Use java.util.Date with Slick 3.1.0-M1
我是 Slick 的新手。我正在使用 mysql 并且我正在尝试从数据库中检索一些日期时间。这是我的进口商品
import slick.driver.MySQLDriver.simple._
import scala.slick.driver._
import java.util.Date
这里是 class 映射所在的行
def creationDate = column[Date]("creation_date")
但是我收到这个错误
could not find implicit value for parameter tt: slick.ast.TypedType[java.util.Date]
有没有办法在不使用字符串的情况下将日期时间从 mysql 导入到 java.util.Date?
谢谢
您不能在列中使用 java.util.Date
的原因是
Slick 不支持它,请参阅 Table 行部分中的 documentation。
The following primitive types are supported out of the box for JDBC-based databases in JdbcProfile (with certain limitations imposed by the individual database drivers):
Date types: 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
.
中找到三个与时间相关的 class
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 _)
}
那样的话,您只需将 Timestamp 来回转换为您想要的任何与时间相关的类型,但这应该没什么大不了的。
无论如何,希望对您有所帮助。
你试过了吗Joda-Time?
如果没有,你应该认真考虑一下。并且有一个 slick-mapper 项目 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")
如果您想按原样使用 java.util.Date,
创建映射日期类型到时间戳。
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
)
我是 Slick 的新手。我正在使用 mysql 并且我正在尝试从数据库中检索一些日期时间。这是我的进口商品
import slick.driver.MySQLDriver.simple._
import scala.slick.driver._
import java.util.Date
这里是 class 映射所在的行
def creationDate = column[Date]("creation_date")
但是我收到这个错误
could not find implicit value for parameter tt: slick.ast.TypedType[java.util.Date]
有没有办法在不使用字符串的情况下将日期时间从 mysql 导入到 java.util.Date?
谢谢
您不能在列中使用 java.util.Date
的原因是
Slick 不支持它,请参阅 Table 行部分中的 documentation。
The following primitive types are supported out of the box for JDBC-based databases in JdbcProfile (with certain limitations imposed by the individual database drivers): Date types: 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 _)
}
那样的话,您只需将 Timestamp 来回转换为您想要的任何与时间相关的类型,但这应该没什么大不了的。
无论如何,希望对您有所帮助。
你试过了吗Joda-Time?
如果没有,你应该认真考虑一下。并且有一个 slick-mapper 项目 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")
如果您想按原样使用 java.util.Date, 创建映射日期类型到时间戳。
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
)