Frage

ich benutze Anorm Datenbankabfragen durchführen. Wenn ich eine mache executeUpdate(), wie soll ich die richtige Fehlerbehandlung durchführen? Es hat einen Rückgabetyp MayErr[IntegrityConstraintViolation,Int], Ist das ein Satz oder eine Karte?

Da ist ein Beispiel, aber ich verstehe nicht, wie ich mit dem Rückgabewert umgehen sollte:

val result = SQL("delete from City where id = 99").executeUpdate().fold( 
    e => "Oops, there was an error" , 
    c => c + " rows were updated!"
)

Wie überprüfe ich, ob die Abfrage fehlgeschlagen ist? (Verwendung result), und wie bekomme ich die Anzahl der betroffenen Reihen, wenn die Abfrage erfolgreich war?

Im Moment verwende ich diesen Code:

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!"
)

Aber ich weiß nicht, wie mein Fehlerhandling-Code aussehen sollte. Gibt es ein Beispiel dafür, wie der Rückgabewert des Typs verwendet wird MayErr[IntegrityConstraintViolation,Int]?

War es hilfreich?

Lösung

Sie könnten offensichtlich a machen

val updateResult = ....executeUpdate()
val success = updateResult.fold(e => false, c => true)

Es sieht so aus, als ob Sie auch anrufen können

val success = updateResult.isRight

Allgemeiner können Sie auf die Wickel zugreifen

updateResult.e match {
    case Left(error) => ... do something with error ...
    case Right(updateCount) => ...do something with updateCount...
}

Vielleicht würde jemand, der mit dem Spiel vertraut ist, erklären, warum Scala.

Andere Tipps

Es sieht aus wie MayErr Wickelt Either. Also ist es weder ein Map Noch a Set, sondern ein Objekt, das eines von zwei unterschiedlich typisierten Objekten enthalten kann.

Sich ansehen diese Frage, und Sie werden einige Möglichkeiten sehen, ein Objekt zu verarbeiten, was in diesem Fall entweder eine IntegrityConstraintviolation oder eine int enthält. In Bezug auf http://scala.playframework.org/.../scala$mayerr.html, Es sieht so aus, als ob Sie ein Objekt holen können, indem Sie sich auf das Wertmitglied beziehen e. Es scheint auch eine implizite Konvertierung zur Verfügung zu geben, sodass Sie einfach a behandeln können MayErr[IntegrityConstraintViolation,Int] als an Either[IntegrityConstraintViolation,Int] ohne weitere Zeremonie.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top