使用内存中的SQLite的Android

我一直在阅读,浏览,search很多东西,我多次来回翻转,我尽可能地缩小了我的问题范围。

我唯一不明白的是如何充分使用内存中SQLite数据库。

这是我的情况 – 我有一个encryption的SQLite数据库,我加载我的应用程序(这部分工作肯定)解密。 与数据库交互的我的类肯定能用普通的数据库工作。 所以,为了简化,所有的东西都是完美无瑕的,从内部手机内存中加载一个普通的数据库,但我不知道如何或在哪里存储解密的数据库在内存中,所以它会被解释为正常的数据库。

我想我应该把null而不是在super(context, null, null, 3); 并使用:memory:而不是SQLiteDatabase.openDatabase()中的path,但我仍然不完全理解。 它说它找不到一个android_metadata表,但我确定数据库是应该的。

希望我清楚这一点:)

Solutions Collecting From Web of "使用内存中的SQLite的Android"

如果namenull SQLiteOpenHelper()将创build一个内存数据库。 请注意,它将在您调用getWritableDatabase()时创build。

那么你应该插入你的数据。

您(或框架)使用以下其中一项创build数据库:

  • SQLiteDatabase.create()
  • SQLiteDatabase.openDatabase()
  • SQLiteDatabase.openOrCreateDatabase()

第一个选项是创build一个纯内存数据库的唯一方法,另外两个打开或创build一个数据库文件。

因此,如果您使用的是SQLiteOpenHelper()并且您将name传递为null ,则框架会调用SQLiteDatabase.create(null) ,因此您将得到一个只驻留在内存中的数据库(它在调用close()时死亡)。 没有必要再调用其他直接方法之一。 而是从你的助手调用getReadableDatabase()getWritableDatabase()

你必须小心使用inmemory,因为一旦数据库连接丢失,你的数据将会丢失。 确保你的数据库实例没有被closures

https://www.sqlite.org/inmemorydb.html