Tengo algo de código para actualizar una tabla de base de datos que se parece aTener un destructor tomar acciones diferentes dependiendo de si se ha producido una excepción
try
{
db.execute("BEGIN");
// Lots of DELETE and INSERT
db.execute("COMMIT");
}
catch (DBException&)
{
db.execute("ROLLBACK");
}
Me gustaría envolver la lógica de la transacción en una clase de RAII por lo que pude acaba de escribir
{
DBTransaction trans(db);
// Lots of DELETE and INSERT
}
pero ¿cómo iba a escribir el destructor para que?
+1 Así es como se hacen tales cosas. Sin embargo, hay un problema: ¿y si te olvidas de llamar a commit()? – sharptooth
¿Y qué pasa si olvidas crear la variable de transacción? No puedes evitar todos los errores. –
@sharptooth: ¿y si se olvidó de hacer los cambios que quería comprometer en primer lugar? No creo que haya mucho que puedas hacer para protegerte contra la incompetencia. – jalf