2012-09-14 9 views
7

Vedo che le mie letture vengono bloccate dalle scritture nel database che si trova in modalità WAL - Sono perplesso sul perché.SQLite DB (con WAL) bloccato durante la preparazione di un "select" statmement - perché?

mia configurazione:

  • SQLite3 database, journal_mode = WAL, sincroni = NORMALE processi
  • Mulitple C++ (3 per l'esattezza) utilizzare il database - Qualsiasi metodo entro questi processi aprire e chiudere loro non -connessione condivisa con sqlite3_open_v2.
  • metodi che sono l'inserimento dei dati aprono la db in modalità SQLITE_OPEN_READWRITE
  • I metodi che leggono dal database (cioè solo non selezionare le dichiarazioni) aprire il db in SQLITE_OPEN_READONLY modalità

In modalità WAL credo che dovrebbe essere possibile avere lettori concorrenti mentre c'è una scrittura in corso.

Eppure io sto vedendo "database è bloccato" quando sto preparando una dichiarazione prescelta utilizzando sqlite3_prepare_v2

Che cosa potrei fare male che sta causando il lettore a bloccarsi? Sto fraintendendo cosa sia in realtà un "Leggi"?

Eventuali suggerimenti apprezzato,

grazie :)

risposta

0

verificare se avete sqlite3_reset dopo ogni sqlite3_step perché questo è un caso che causa l'errore di database è bloccato. dopo aver preparato una istruzione con sqlite3_prepare e averla eseguita con sqlite3_step, devi sempre resettarla con sqlite3_reset.

L'interfaccia sqlite3_reset (S) reimposta l'istruzione preparata S indietro a all'inizio del programma.

spero che questo risolva il tuo problema ... !!!

Problemi correlati