2012-04-06 10 views
5

Sto utilizzando le transazioni per inserire più righe nella tabella. Tuttavia, vedo ancora il file temporaneo SQL journal creato sulla scheda SD insieme alla tabella sqlite.Come disabilitare il file di SQLite Journal Android?

Come disabilitare la creazione del file di giornale?

Grazie

+3

Il file journal viene creato dal db sqlite quando si utilizza le transazioni per assicurare che se per qualche motivo la transazione viene interrotta con mezzi esterni db non verrà danneggiato. Lo lascerei da solo se fossi in te. –

+0

@ Mr.Will Allora, su Android, il giornale viene tenuto in giro quando nulla sta toccando il database, quando questo non è il comportamento predefinito su altri sistemi? – Michael

risposta

8

È possibile scegliere di mantenere la rivista in memoria in modo che viene creato alcun file -journal:

pragma journal_mode=memory; 

Si noti che è necessario eseguire questa operazione ogni volta che si apre il database.

vi consiglio di leggere quanto segue per avere una migliore idea di quello che sta succedendo:

http://www.sqlite.org/pragma.html#pragma_journal_mode

+0

Allora perché questo file è ancora in circolazione dopo aver usato 'PRAGMA journal_mode = OFF' e chiuso il database? – Michael

+0

Non funziona. vedere: http://stackoverflow.com/questions/39246368/how-to-turn-off-journaling-sqlite-in-android?noredirect=1#comment65828847_39246368 –

5

La rivista è un file SQLite interna che viene utilizzato durante l'esecuzione di transazioni (per garantire rollback). Non puoi disabilitarlo e non vuoi.

+3

In realtà è possibile disattivarlo :-) con 'PRAGMA journal_mode = off' –

+0

ho provato quanto segue: Il cursore c1 = db.rawQuery ("PRAGMA journal_mode = OFF", null); c1.close(). Sembra non avere alcun effetto. Continuo a vedere il file journal creato – Arvind

+2

Sì, come ho menzionato nella mia risposta, il pragma non persiste quindi è necessario eseguirlo ogni volta che si apre il DB. –

-1

È possibile eliminare file journal utilizzando sottostante Codice

@Override 
public void onOpen(SQLiteDatabase db) {   
    Cursor cc = db.rawQuery("PRAGMA journal_mode=DELETE",null); 
    Log.i(TAG,"--- cursor count " + cc.getCount());  
    super.onOpen(db);   
} 

è necessario utilizzare cursore. Il cursore è un'interfaccia che fornisce accesso in lettura e scrittura casuale al set di risultati restituito da una query del database. Il file journal verrà cancellato se si utilizza il cursore.

0

Ricordare che la dichiarazione PRAGMA journal_mode=OFF o PRAGMA journal_mode=memory è valida per base di transazione. È necessario impostarlo per ogni transazione.

Problemi correlati