SQLiteOpenHelper múltiples bases de datos en memoria

android.database.sqlite.SQLiteOpenHelper proporciona la posibilidad de utilizar una base de datos en memoria si el argumento de nombre para su constructor es null :

String: del archivo de base de datos o null para una base de datos en memoria

Si SQLiteOpenHelper se instancia varias veces con un argumento de nombre null , ¿acceden a la misma base de datos en memoria o se crea una base de datos independiente en la memoria cada vez?

2 Solutions collect form web for “SQLiteOpenHelper múltiples bases de datos en memoria”

De la documentación oficial de SQLite Bases de datos en memoria

Abrir dos conexiones de base de datos con el nombre de archivo ": memory:" creará dos bases de datos independientes en memoria.

En Android, pase null en lugar de ": memory:"

Por lo tanto, si instancia SQLiteOpenHelper varias veces con un argumento de nombre nulo entonces crea una base de datos en memoria independiente creada cada vez

Si nos fijamos en el código fuente , vemos que en el constructor mName se pondría a null .

 public SQLiteOpenHelper(Context context, String name, CursorFactory factory, int version, DatabaseErrorHandler errorHandler) { if (version < 1) throw new IllegalArgumentException("Version must be >= 1, was " + version); mContext = context; mName = name; mFactory = factory; mNewVersion = version; mErrorHandler = errorHandler; } 

Lo que significa que getDatabaseName() devuelve null .

 public String getDatabaseName() { return mName; } 

Más adelante, a través del uso de getReadableDatabase() o getWritableDatabase() , si mName es null , llama al método create para una base de datos en memoria en lugar de intentar abrir una desde el disco.

 if (mName == null) { db = SQLiteDatabase.create(null); // in-memory } else { // db file opened or created } ... return db; 

Esta variable db se mantiene en el SQLiteOpenHelper hasta que se cierra, que en el caso de una base de datos en memoria, significa que se eliminan los datos.


Para aclarar,

Cada instancia de un SQLiteOpenHelper que utiliza una base de datos en memoria será su propia base de datos, mientras que la misma instancia utilizará una base de datos y los mantendrá hasta que se cierre.

  • Cómo funciona SQLiteOpenHelper Context
  • SQLiteDatabase.openDatabase vs SQLiteOpenHelper.getReadableDatabase
  • Conexión de SQLite se filtró aunque todo se cerró
  • La mejor opción para almacenar nombre de usuario y contraseña en la aplicación Android
  • "No hay un constructor por defecto disponible en android.database.sqlite.SQLitepenhelper" en Android Studio
  • Obtención de contexto en onCreate en SQLiteOpenHelper
  • Confundido sobre CursorLoaders y usarlos con un SQLiteOpenHelper personalizado
  • Android SQLiteException: Error al cambiar la configuración regional de db a 'en_US'
  • Por qué necesitamos onUpgrade (); Método en la clase SQLiteOpenHelper
  • ¿Es realmente necesario crear tablas SQLite cada vez que se inicia la aplicación?
  • Java - java.lang.IllegalStateException: No se pudo leer la fila 0, col -1 de CursorWindow
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.