使用内存中的sqlite android
使用内存中的sqlite android,android,sqlite,in-memory,Android,Sqlite,In Memory,我一直在阅读,浏览,搜索这方面的很多东西,我已经来回穿梭了很多次,我设法尽可能缩小我的问题 我唯一不明白的是,如何充分利用内存中的SQLite数据库 这是我的情况——我有一个加密的SQLite数据库,我在加载应用程序的过程中对其进行解密(这部分可以肯定)。我的与数据库交互的类肯定能在普通数据库中工作。 简而言之,从手机内部存储器加载的普通DB是完美的,但我不确定如何或在哪里将解密后的DB存储在内存中,以便将其解释为正常DB 我想我应该在super(context,null,null,3)中放置n
我一直在阅读,浏览,搜索这方面的很多东西,我已经来回穿梭了很多次,我设法尽可能缩小我的问题 我唯一不明白的是,如何充分利用内存中的SQLite数据库 这是我的情况——我有一个加密的SQLite数据库,我在加载应用程序的过程中对其进行解密(这部分可以肯定)。我的与数据库交互的类肯定能在普通数据库中工作。 简而言之,从手机内部存储器加载的普通DB是完美的,但我不确定如何或在哪里将解密后的DB存储在内存中,以便将其解释为正常DB 我想我应该在
super(context,null,null,3)中放置null
而不是名称代码>并使用:内存:
而不是SQLiteDatabase.openDatabase()
中的路径,但我仍然不完全理解。它说它找不到一个android\u元数据
表,但我确信数据库应该是这样的
希望我已经清楚了:)如果名称
为null
,则将创建内存中的数据库。请注意,它将在调用getWritableDatabase()
时创建
然后您应该插入数据。您(或框架)使用以下一项创建数据库:
SQLiteDatabase.create()
SQLiteDatabase.openDatabase()
SQLiteDatabase.openOrCreateDatabase()
第一个选项是创建仅内存数据库的唯一方法,另外两个选项打开或创建数据库文件
因此,如果您正在使用SQLiteOpenHelper()
并将name
传递为null
,框架将调用SQLiteDatabase.create(null)
,因此您将得到一个只存在于内存中的数据库(当调用close()
时,它将死亡)。不需要同时调用其他直接方法之一。相反,从您的助手处调用getReadableDatabase()
或getWritableDatabase()
。您必须小心使用inmemory,因为一旦数据库连接断开,您的数据将丢失。确保数据库实例未关闭
试过了吗?我没怎么想。我刚开始研究的时候没有找到它,所以我开发了自己的两步“加密”。谢谢你的链接,我来看看。你能告诉我SQLCipher有多安全吗?它是否压缩数据?256位AES加密是可以的-我敢打赌,你自己不可能实现得更好。好吧,那么,在调用myDatabase=SQLiteDatabase.create(null)之后,我如何使用数据库代码>?我在另一个类中将解密的DB作为原始字节,如何将这些字节合并到创建的DB句柄中?我不相信sqlite3支持从现有blob“打开”a:memory:database,因此Android中这样做的API可能也不存在。您的最佳选择可能是将解密后的数据库流式输出到一个文件中,在该文件中可以使用openDatabase()
以有效路径打开该数据库。如果不想保留解密后的数据库,可以使用查询/插入将数据复制到仅内存的版本中,然后关闭/删除文件版本。@Devunwired,当您说“调用close()
时,它将消失”,您指的是SQLiteOpenHelper.close()
,还是SQLiteDatabase.close()
?关闭数据库连接(通过SQLiteDatabase.close()
)会破坏数据库吗?