gpt4 book ai didi

mysql - 读取带有 NULL 列的行会导致 slick 异常

转载 作者:行者123 更新时间:2023-11-30 21:42:34 24 4
gpt4 key购买 nike

我有一个列类型为日期的表格。此列接受空值,因此,我将其声明为一个选项(参见下面的 perDate 字段)。当我通过应用程序代码运行选择查询我得到以下异常

slick.SlickException: 读取 ResultSet 列的 NULL 值 (null)

问题.This是 Slick 表定义:

  import java.sql.Date
import java.time.LocalDate

class FormulaDB(tag: Tag) extends Table[Formula](tag, "formulas") {

def sk = column[Int]("sk", O.PrimaryKey, O.AutoInc)
def formula = column[Option[String]]("formula")
def notes = column[Option[String]]("notes")
def periodicity = column[Int]("periodicity")
def perDate = column[Option[LocalDate]]("per_date")(localDateColumnType)

def * =
(sk, name, descrip, formula, notes, periodicity, perDate) <>
((Formula.apply _).tupled, Formula.unapply)

implicit val localDateColumnType = MappedColumnType.base[Option[LocalDate], Date](
{
case Some(localDate) => Date.valueOf(localDate)
case None => null
}, { sqlDate =>
if (sqlDate != null) Some(sqlDate.toLocalDate) else None
}
)

}

最佳答案

您的映射列函数只需要提供从 LocalDateDate 的转换。如果 Slick 知道如何处理 LocalDate,它将自动处理 Option[LocalDate]

这意味着将您的 localDateColumnType 更改为:

implicit val localDateColumnType = MappedColumnType.base[LocalDate, Date](
Date.valueOf(_), _.toLocalDate
)

第 5 章 Essential Slick涵盖了其中的一部分,关于 User Defined Features in the Manual 的部分也是如此.

我不是 100% 确定您为什么会看到运行时错误:我的猜测是该列被视为 Option[Option[LocalDate]] 或类似的,并且那里有一个 null 级别被遗漏了。

顺便说一句,你的 def * 可能是:

def * = (sk, name, descrip, formula, notes, periodicity, perDate).mapTo[Formula]

...读起来更好看。 mapTo 是在某个时候添加到 Slick 3 中的。

关于mysql - 读取带有 NULL 列的行会导致 slick 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50912205/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com