2010-05-21 10 views
11

Estoy usando la interfaz sqlite c/C++.SQLITE (interfaz C/C++) - Cómo confirmar una transacción

Ahora aquí está mi escenario -

Tengo 3 tablas (tablas relacionadas) dicen A, B, C

Ahora, hay una función llamada Establecer, que conseguir algunas entradas y por motivos en las entradas inserta filas en estas tres tablas. (a veces puede ser una actualización en una de las tablas)

Ahora necesito dos cosas.

Uno, no quiero la función de autocompromiso. Básicamente me gustaría comprometerse después de cada 1.000 llamadas a conjunto de funciones

En segundo lugar, dentro de la propia función de conjunto, si me parece que después de insertar en dos tablas, la tercera inserción falla, entonces tengo que volver, aquellos particulares cambios en esa llamada a la función Establecer.

Ahora no veo expuesta ninguna función sqlite3_commit. Solo veo una función llamada sqlite3_commit_hook() que es ligeramente diferente en la documentación. ¿Hay alguna función expuesta para este propósito? o ¿Cuál es la forma de lograr este comportamiento?

Puede ayudarme con el mejor enfoque para hacer esto.

Saludos, Arjun

+0

¿no puedes simplemente ejecutar las consultas 'BEGIN' y' COMMIT'? – falstro

Respuesta

3

Se puede utilizar begin, commit y sentencias SQL ROLLBACK dentro del código C/C++?

23

Se utiliza sqlite3_exec y pasar "iniciar la transacción" y "END TRANSACTION", respectivamente.

// 'db' is the pointer you got from sqlite3_open* 
sqlite3_exec(db, "BEGIN TRANSACTION;", NULL, NULL, NULL); 
// Any (modifying) SQL commands executed here are not committed until at the you call: 
sqlite3_exec(db, "END TRANSACTION;", NULL, NULL, NULL); 

Hay sinónimos de estos comandos SQL (como COMMIT en lugar de END TRANSACTION). Como referencia, aquí está el SQLite documentation for transactions.

Cuestiones relacionadas