gpt4 book ai didi

mysql - 通过 java.time LocalDateTime 进行异常比较/搜索

转载 作者:行者123 更新时间:2023-11-29 20:06:18 25 4
gpt4 key购买 nike

Anorm 2.5.2 和 java.time LocalDateTime 作为日期

val users = SQL(
s"SELECT * FROM user WHERE name={name} AND registered_date={registeredDate}").on(
"name" -> user.name,
"registeredDate" -> user.registeredDate
).executeQuery().as(userParser.*)

我发现,即使我在数据库中具有相同的名称1和相同的日期时间(时刻),查询也会返回空的用户 - 无法找到/匹配它

看来它无法按日期时间进行比较。为什么会这样?

我能够正确地将本地日期时间(参见: related )插入数据库(我的意思是似乎 db 和 scala 类型之间的转换已打开) - 即我使用:

导入 anorm.ParameterMetaData._(扩展 JavaTimeParameterMetaData)

我的用户解析器:

 val userParser: RowParser[User] = {
get[Option[Long]]("user.id") ~
get[String]("user.name") ~
get[LocalDateTime]("user.registered_date") map {
case id ~ name ~ registeredDate =>
User(
id = id ,
name = name,
registeredDate = registeredDate
)
}
}

我的用户:

case class User(id: Option[Long] = None,
name: String,
registeredDate: LocalDateTime
)

最佳答案

好的。我的错。

关于MYSQL和TIMESTAMP精度的问题 http://dev.mysql.com/doc/refman/5.5/en/datetime.html

所以,就我而言:

CREATE TABLE `user` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`registered_date` TIMESTAMP(6) NOT NULL,
PRIMARY KEY (`id`));

此处:Timestamp with a millisecond precision: How to save them in MySQL

我刚刚用 TIMESTAMP(6) 声明它 - 这也包括毫秒。

因为在我的测试中:

  "The User Repository" should "not create new user if it already exists" in {

val someTimeAgo = LocalDateTime.now
val userWithoultId1 = User(name = "name1", registeredDate = someTimeAgo)
val maybeUserWithId1 = userRepository.findOrCreate(userWithoultId1)
val maybeUserWithId2 = userRepository.findOrCreate(userWithoultId1)
maybeUserWithId1.get.id should === (maybeUserWithId2.get.id)

LocalDateTime.now 显然也包括毫秒

所以我还是喜欢Anorm。 (这只是我..):)

关于mysql - 通过 java.time LocalDateTime 进行异常比较/搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40335607/

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