2012-04-06 10 views
5

Estoy usando transacciones para insertar varias filas en la tabla. Pero aún veo el archivo sqlite-journal temporal que se está creando en la tarjeta SD junto con la tabla sqlite.Cómo deshabilitar el archivo Android SQLite Journal?

¿Cómo desactivo la creación del archivo de diario?

Gracias

+3

El archivo de diario es creado por sqlite db cuando usa transacciones para asegurarse de que si por alguna razón la transacción se interrumpe por medios externos, la base de datos no se corrompe. Dejaría eso solo si fuera tú. –

+0

@ Mr.Will Entonces, ¿por qué, en Android, se mantiene el diario cuando nada está tocando la base de datos, cuando este no es el comportamiento predeterminado en otros sistemas? – Michael

Respuesta

8

Puede optar por mantener la revista en la memoria para que no se crea un archivo de -Diario:

pragma journal_mode=memory; 

Tenga en cuenta que es necesario ejecutar este cada vez que abra la base de datos.

recomiendo que lea lo siguiente para tener una mejor idea de lo que está pasando:

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

+0

Entonces, ¿por qué este archivo sigue activo después de usar 'PRAGMA journal_mode = OFF' y de cerrar la base de datos? – Michael

+0

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

5

la revista es un archivo de SQLite interno que se utiliza cuando se ejecuta transacciones (para asegurar cilindro de apoyo). No puedes deshabilitarlo y no quieres hacerlo.

+3

En realidad, puede deshabilitarlo :-) con 'PRAGMA journal_mode = OFF' –

+0

He intentado lo siguiente: Cursor c1 = db.rawQuery (" PRAGMA journal_mode = OFF ", nulo); c1.close(). Parece que no tiene efecto. Sigo viendo el archivo de diario que se está creando – Arvind

+2

Sí, como mencioné en mi respuesta, el pragma no persiste, por lo que debe ejecutarlo cada vez que abra la base de datos. –

-1

Usted puede eliminar el archivo de diario mediante el siguiente código

@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);   
} 

Es necesario utilizar cursor. Cursor es una interfaz que proporciona acceso aleatorio de lectura y escritura al conjunto de resultados devuelto por una consulta de base de datos. El archivo de diario se eliminará si usa el cursor.

0

Recuerde, la declaración PRAGMA journal_mode=OFF o PRAGMA journal_mode=memory es válida por transacción base. Debes configurarlo para cada transacción.

Cuestiones relacionadas