【发布时间】:2014-07-12 22:28:48
【问题描述】:
我正在尝试为 android 实现 Sqlcipher。我将它用于多个活动,因此正在扩展 SQLiteOpenHelper {}。
我是这样的
我知道在第一次访问数据库之前不会调用 OnCreate 覆盖方法。
我的 oncreate 方法看起来像
@Override
public void onCreate(SQLiteDatabase db) {
SQLiteDatabase.loadLibs(context);
File databaseFile = context.getDatabasePath("SyncableDiabetesDatabase.db");
databaseFile.mkdirs();
databaseFile.delete();
mDataBase = SQLiteDatabase.openOrCreateDatabase(databaseFile,SuperKey, null);
我正在尝试通过调用 this.getWritableDatabase(SuperKey); 来让 OnCreate 方法调用此方法;但是,当我运行此命令时,我收到错误
net.sqlcipher.database.SQLiteException:尝试写入只读数据库:PRAGMA user_version = 1
我不确定这是怎么可能的,因为该命令是针对可写数据库的
我知道 sqlcipher 已正确安装,因为我可以将 DB 创建代码放在 OnCreate 之外,并且数据已正确存储。但是,每次调用活动时都会覆盖该文件,因此我将其移至 OnCreate,它仅在创建表时调用一次。
这里的任何见解都将受到欢迎。
如果需要,我可以提供任何其他代码片段。
谢谢
【问题讨论】:
-
您显示的代码都不属于
onCreate()的SQLiteOpenHelper。我强烈建议你先把 SQLCipher 放在一边,先学习如何使用 SQLite。您不妨阅读the documentation for how to use SQLite。 -
您好,我很欣赏 cmets,但我在 SQLite 方面拥有丰富的经验,并且自从应用程序创建以来就一直在此应用程序上运行它。我正在尝试迁移到 SqlCipher 作为额外的安全性。如果不在 onCreate 中,您建议在哪里访问数据库文件,因为它必须在应用程序打开之间持续存在,并且如果它在构造函数之外将被覆盖?并且只读数据库链接很有趣,但是当前的 SqlLite 数据库在 getWritable 方面没有问题
标签: java android sqlite sqlcipher