If patrzymy na source code, widzimy, że w konstruktorze mName
zostanie ustawiony na 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;
}
Czyli getDatabaseName()
powraca null
.
public String getDatabaseName() {
return mName;
}
Później, dzięki zastosowaniu getReadableDatabase()
lub getWritableDatabase()
, jeśli mName
jest null
, to wywołuje metodę create
do bazy danych w pamięci zamiast próbować otwierania jedną z dysku.
if (mName == null) {
db = SQLiteDatabase.create(null); // in-memory
} else {
// db file opened or created
}
...
return db;
To db
zmienna jest utrzymywana w SQLiteOpenHelper
dopóki nie zostanie zamknięty, co w przypadku bazy danych w pamięci, oznacza, że dane są usuwane.
celu wyjaśnienia,
Każda instancja SQLiteOpenHelper
który korzysta z bazy danych w pamięci będzie własną bazę danych, podczas gdy ta sama instancja będzie wykorzystywać jedną bazę danych i utrzymywać, że dopóki nie zostanie zamknięty.
Chcę powiedzieć, że jest taki sam, ponieważ jeśli używasz tego samego ciągu, to zawsze używany jest ten sam plik bazy danych. –