Как я должен использовать Mayerr [целостность, инвентация, int] в Scala и Anorm?

StackOverflow https://stackoverflow.com/questions/6323961

Вопрос

я использую Анорм Чтобы выполнить запросы базы данных. Когда я делаю 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] без дальнейшей церемонии.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top