Se guardiamo allo source code, vediamo che nel costruttore mName
si imposterebbe su 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;
}
Il che significa getDatabaseName()
rendimenti null
.
public String getDatabaseName() {
return mName;
}
Successivamente, attraverso l'uso di getReadableDatabase()
o getWritableDatabase()
, se mName
è null
, poi chiama il metodo create
per un database in memoria invece di cercare di aprire uno dal disco.
if (mName == null) {
db = SQLiteDatabase.create(null); // in-memory
} else {
// db file opened or created
}
...
return db;
Tale db
variabile viene mantenuta nella SQLiteOpenHelper
finché non viene chiusa, che nel caso di un database in memoria, significa che i dati vengono eliminati.
Per chiarire,
Ogni istanza di un SQLiteOpenHelper
che utilizza un database in memoria sarà proprio database mentre la stessa istanza utilizzerà un database e persistere che dati finché non viene chiuso.
fonte
2016-05-04 18:40:44
Voglio dire che è lo stesso perché se si utilizza la stessa stringa, viene sempre utilizzato lo stesso file di database. –