19


我一直在阅读,浏览,搜索很多关于此的内容,我已经多次来回交叉使用stackoverflow,并且我设法尽可能地缩小我的问题。

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

这是我的情况 - 我有一个加密的 SQLite 数据库,我在加载我的应用程序期间解密它(这部分肯定有效)。我与数据库交互的类肯定适用于普通数据库。因此,简而言之,从手机内部存储器加载的普通数据库完美无缺,但我不确定如何或在何处将解密的数据库存储在内存中,以便将其解释为普通数据库。

我想我应该输入null而不是名称super(context, null, null, 3);并使用:memory:而不是路径SQLiteDatabase.openDatabase(),但我仍然不完全理解。它说它找不到android_metadata表,但我确定数据库应该是这样。

希望我对此很清楚:)

4

3 回答 3

31

name如果是.SQLiteOpenHelper()将创建一个内存数据库null。请注意,它将在您调用时创建getWritableDatabase()

然后你应该插入你的数据。

于 2012-07-25T20:08:05.713 回答
12

您(或框架)使用以下方法之一创建数据库:

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

第一个选项是创建仅内存数据库的唯一方法,其他两个打开或创建数据库文件。

因此,如果您正在使用SQLiteOpenHelper()并传递nameas null,框架调用SQLiteDatabase.create(null),因此您将获得一个仅存在于内存中的数据库(它在被调用时死亡close())。无需调用其他直接方法之一。而是致电getReadableDatabase()getWritableDatabase()从您的助手那里。

于 2012-07-25T20:37:54.593 回答
0

您必须小心使用内存,因为一旦数据库连接丢失,您的数据就会丢失。确保您的数据库实例未关闭

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

于 2017-09-27T08:52:49.910 回答