Pregunta SQLITE (interfaz C / C ++) - Cómo comprometer una transacción


Estoy usando la interfaz sqlite c / c ++.

Ahora aquí está mi escenario -

Tengo 3 tablas (tablas relacionadas) decir A, B, C.

Ahora, hay una función llamada Conjunto, que obtienen algunas entradas y basadas 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 comprometerme después de cada 1000 llamadas a Conjunto función

En segundo lugar, dentro de la función establecida, si encuentro que después de insertar en dos tablas, el tercer inserto falla, entonces tengo que revertir, esos cambios particulares en ese Conjunto Llamada de función.

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 de hacer esto?

Saludos, Arjun


14
2018-05-21 07:03


origen


Respuestas:


¿puedes usar las instrucciones SQL, COMIENZO y ROLLBACK en el código C / C ++?


3
2018-05-21 07:21



Tu usas sqlite3_exec y pase "BEGIN TRANSACTION" 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 para estos comandos SQL (como COMMIT en lugar de END TRANSACTION) Como referencia, aquí está el Documentación SQLite para transacciones.


28
2018-05-23 19:37