我正在尝试为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
我不确定这是怎么可能的,因为命令是针对可写DB
我知道sqlcipher已正确安装,因为我可以将数据库创建代码放在OnCreate之外,并且数据存储正确。但是,每次调用活动时都会覆盖文件,因此我将其移动到OnCreate,而OnCreate仅在创建表时调用一次。
这里的任何见解都非常受欢迎。
如果需要,我可以提供任何额外的代码snippits。
谢谢
答案 0 :(得分:0)
您无需在SQLiteDatabase.openOrCreateDatabase
的{{1}}方法中调用onCreate
,数据库实例已作为参数提供给函数。可以找到使用SQLiteOpenHelper
的示例here。