2012-09-14 17 views
7

Estoy viendo mis lecturas siendo bloqueadas por las escrituras en la base de datos que está en modo WAL - No estoy seguro de por qué.SQLite DB (con WAL) bloqueado al preparar una declaración "select" - ¿por qué?

Mi configuración:

  • base de datos SQLite3, journal_mode = WAL, síncronos = normal procesos
  • Mulitple C++ (3 para ser exactos) utiliza la base de datos - Cualquier método dentro de estos procesos abra y cierre su propio no -cuenta compartida con sqlite3_open_v2.
  • Los métodos que se está introduciendo sus datos abren la db en SQLITE_OPEN_READWRITE modo
  • Los métodos que se leen de la base de datos (es decir, sólo hay que seleccionar las declaraciones) abrir el PP en SQLITE_OPEN_READONLY modo

En el modo WAL creo que debería ser es posible tener lectores simultáneos mientras hay una escritura ocurriendo.

Sin embargo, yo estoy viendo "base de datos está bloqueado" cuando estoy preparando una instrucción de selección utilizando sqlite3_prepare_v2

¿Qué podría estar haciendo mal que está causando que el lector se bloquean? ¿Estoy malinterpretando lo que realmente es una "lectura"?

Algún consejo apreciado,

gracias :)

Respuesta

0

comprobar si tiene sqlite3_reset después de cada sqlite3_step porque se trata de un caso que hace que la base de datos está bloqueado error. después de preparar una declaración con sqlite3_prepare y ejecutarla con sqlite3_step, siempre debe restablecerla con sqlite3_reset.

La interfaz sqlite3_reset (S) restablece la instrucción preparada S a al comienzo de su programa.

Espero que esto resuelva su problema ... !!!

Cuestiones relacionadas