Как я должен использовать Mayerr [целостность, инвентация, int] в Scala и Anorm?
-
27-10-2019 - |
Вопрос
я использую Анорм Чтобы выполнить запросы базы данных. Когда я делаю executeUpdate()
, как мне сделать правильную обработку ошибок? У него есть возвратный тип MayErr[IntegrityConstraintViolation,Int]
, это набор или карта?
Есть пример, но я не понимаю, как я должен справиться с возвратной стоимостью:
val result = SQL("delete from City where id = 99").executeUpdate().fold(
e => "Oops, there was an error" ,
c => c + " rows were updated!"
)
Как проверить, не удалось ли запрос? (с использованием result
), и как мне получить число затронутых рядов, если запрос был успешным?
На данный момент я использую этот код:
SQL(
"""
INSERT INTO users (firstname, lastname) VALUES ({firstname}, {lastname})
"""
).on("firstname" -> user.firstName, "lastname" -> user.lastName)
.executeUpdate().fold(
e => "Oops, therw was an error",
c => c + " rows were updated!"
)
Но я не знаю, как должен выглядеть мой код обработки ошибок. Есть ли какой -либо пример использования возвращаемого значения типа MayErr[IntegrityConstraintViolation,Int]
?
Решение
Вы могли бы сделать
val updateResult = ....executeUpdate()
val success = updateResult.fold(e => false, c => true)
Похоже, вы также можете позвонить
val success = updateResult.isRight
В целом, вы можете получить доступ к завершению
updateResult.e match {
case Left(error) => ... do something with error ...
case Right(updateCount) => ...do something with updateCount...
}
Может быть, кто -то, более знакомый с игрой, объяснит, почему Scala. или обернута в Mayerr?
Другие советы
Это выглядит как MayErr
это обертывание Either
. Анкет Так что это не Map
ни Set
, а скорее объект, который может содержать один из двух по -разному напечатанные объекты.
Взгляни на этот вопрос, и вы увидите некоторые способы обработки любого объекта, который в этом случае содержит либо целостность, или int. Ссылаясь на http://scala.playframework.org/.../scala$mayerr.html, похоже, вы можете взять любой объект, ссылаясь на член значения e
. Анкет Кажется, есть и неявное преобразование, так что вы можете просто лечить MayErr[IntegrityConstraintViolation,Int]
как Either[IntegrityConstraintViolation,Int]
без дальнейшей церемонии.