2011-07-08 25 views
6

Estoy usando Ormlite para conservar algunos de los datos de mi aplicación de Android (que se ejecuta en un Motorola Xoom). Por defecto, la base de datos sql se guarda en/data/data/[nombre del paquete]/databases/[dbname] .db. El problema es que el Xoom no está rooteado y, por lo tanto, los usuarios no tienen acceso al directorio donde se guarda el db (no se puede copiar/hacer una copia de seguridad/editar el contenido de la base de datos).Android, Ormlite, ubicación de DB

He añadido un código adicional en una de las clases para copiar el db de/data a la tarjeta sd, que funciona bien, pero de forma realista creo que debería ser posible establecer la ruta donde se almacena el db. ¿Me estoy perdiendo algo, o esto no es posible con Ormlite?

Gracias de antemano, C

+0

¿Está tratando de guardar los datos en otra ubicación? No estoy seguro de qué es exactamente lo que quieres hacer. –

Respuesta

2

Puede hacer algo como lo que hizo el tipo en https://stackoverflow.com/a/3911641.

Cuando crea su objeto que hará que sus transacciones db anulen las bases de datos getReadableDatabase y getWriteableDatabase para usar su ruta personalizada. Algo así:

@Override 
public synchronized SQLiteDatabase getWritableDatabase(){ 
    return SQLiteDatabase.openDatabase("/sdcard/mydatabase.db", null, SQLiteDatabase.OPEN_READWRITE); 
} 

@Override 
public synchronized SQLiteDatabase getReadableDatabase(){ 
    return SQLiteDatabase.openDatabase("/sdcard/mydatabase.db", null, SQLiteDatabase.OPEN_READONLY); 
} 

Si estuviera escribiendo su aplicación, no pondría el db en la tarjeta SD. Si el usuario está copiando datos de la aplicación, no podrá acceder a ella. Proporcionaría una funcionalidad de "copia de seguridad" que crearía un archivo en la tarjeta SD en algo como XML, JSON o CSV. Luego, le correspondería al usuario realizar una copia de seguridad en el almacenamiento remoto y sabrá que siempre podrá acceder a su base de datos. A menos que desee crear un almacenamiento temporal y fusionar todo en la tarjeta sd cuando esté disponible ... Pero eso parece mucho más trabajo de lo que vale. ¡Espero que esto haya respondido tu pregunta!

6

Puede crear la base de datos en la tarjeta SD si se utiliza algo así como

public class DatabaseHelper extends OrmLiteSqliteOpenHelper { 
[...] 
public DatabaseHelper(final Context context) { 
    super(context, Environment.getExternalStorageDirectory().getAbsolutePath() 
    + File.separator + DATABASE_NAME, null, DATABASE_VERSION); 
} 

Esto crea el archivo db en, por ejemplo /mnt/sdcard/Android/data/com.your.app/files/myData.sqlite Pro: guarda la memoria interna Con: DB no se puede acceder cuando la tarjeta SD no está disponible (por ejemplo, cuando está conectada a la PC) Además, puede leerlo cualquier persona que pueda ser pro o enfadada.

Usando context.getExternalFilesDir() en vez de Environment.getExternalStorageDirectory() usará una ubicación que es específica de su aplicación y que se limpiará automáticamente después de una desinstalación (y aparece en 2.2 también en la actualización de la aplicación).

P.S. Leí en alguna parte que este enfoque podría no funcionar en las versiones de Android anteriores a 2.2 (?)