我一直关注official documentation,以便在我正在开发的应用中开始使用SQLCipher社区版。所以,我做了一个正确的gradle导入如下:
compile 'net.zetetic:android-database-sqlcipher:3.5.9@aar'
我添加了
@Override
public void onCreate() {
super.onCreate();
SQLiteDatabase.loadLibs(this);
}
MainApplication.java中的。
由于我的应用程序已经发布,我已经在我的SQLiteOpenHelper类实例中的onUpgrade()方法中放置了一些迁移代码。
不幸的是,虽然我升级了数据库版本号,但我还是打电话:
getInstance().getReadableDatabase("testKey");
既不会调用onUpgrade(),也不会调用onCreate()方法。
我在配置中遗漏了什么吗?
答案 0 :(得分:0)
就像你在以前没有加密的数据库中第一次使用密码一样,我建议你强制重新创建数据库。
为此,您只需在DatabaseHelper类中更改数据库名称即可。更改数据库名称后,当设备更新时,onCreate()将触发,它将从零开始创建所有数据库。
public class YourDatabaseHelper extends SQLiteOpenHelper {
public final static String DATABASE_NAME = Constants.DATABASE_NAME; // Change the name to force the database to be created from zero.
public final static int CURRENT_VERSION = Constants.DATABASE_VERSION_INT;
public DatabaseHelper(Context context){
super(context, DATABASE_NAME, null, CURRENT_VERSION);
}
public void onCreate(SQLiteDatabase db){
// Create all your tables.
}
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){
// No need to do anything in here, because onCreate will be triggered.
}
}
答案 1 :(得分:0)
最后,我找到了问题的解决方案。我没有在onUpgrade()方法中调用迁移功能,而是在第一次查询数据库之前(打开应用程序之后)添加了迁移代码:
@foreach(var property in typeof(DepartmentDetails).GetProperties())
{
var label = property.Name;
var value = property.GetValue(Model.DepartmentDetails);
}
我从这个source获得了解决方案。感谢作者,无论他是谁!