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?

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.

  • SQLiteOpenHelper sincronización
  • Actualizaciones de Android en Play Store
  • La escritura concurrente a la base de datos android (de múltiples servicios)?
  • No se puede bajar la base de datos de la versión `n` a` n-1` en Samsung
  • Por qué necesitamos onUpgrade (); Método en la clase SQLiteOpenHelper
  • GetReadableDatabase a menudo, pero no siempre devuelve null
  • Insertar datos JSON en la base de datos SQLite en android
  • SQLiteOpenHelper vs ContentProvider
  • ¿Por qué no puedo usar Resources.getSystem () sin un error de tiempo de ejecución?
  • ¿Cuál es la manera más rápida de analizar una cadena JSON en una tabla SQLite?
  • Obtención de contexto en onCreate en SQLiteOpenHelper
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.