SQLiteException: файл не является базой данных при обновлении версии sqlcipher с 3 до 4 - PullRequest
0 голосов
/ 10 мая 2019

Я давно интегрировал sqlcipher в наш проект. Из-за некоторых проблем с безопасностью мы должны обновить версию sqlcipher. Я прошел по ссылкам ниже

  1. https://discuss.zetetic.net/t/migrating-from-sqlcipher-3-5-1-to-4-1-3-in-android/3652
  2. https://discuss.zetetic.net/t/upgrading-sqlcipher-for-android-from-3-to-4/3580

но я не знаю, куда добавить этот код. Как мне интегрировать их код с моим.

Это мой Logcat

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.axis.leadsloans, PID: 8798
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.axis.leadsloans/com.axis.leadsloans.nnmnu}: net.sqlcipher.database.SQLiteException: file is not a database: , while compiling: select count(*) from sqlite_master;
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2928)
Caused by: net.sqlcipher.database.SQLiteException: file is not a database: , while compiling: select count(*) from sqlite_master;

Это код моей базы данных.

public class CRMDB {
    private SQLiteHelper sqLiteHelper;
    public SQLiteDatabase sqLiteDatabase;
    private Context context;
    .
    .
    .

    public CRMDB(Context c) {
        context = c;
        String s = "";
        SQLiteDatabase.loadLibs(c);
        SharedPreferences prefs = c.getSharedPreferences(Constants.PREFERENCE_NAME, Activity.MODE_PRIVATE);
        empid = prefs.getString("empid", "");
    }


    public CRMDB openToWrite() throws SQLiteFullException {
        sqLiteHelper = new SQLiteHelper(context, MYDATABASE_NAME + "_" + empid + ".db", null, MYDATABASE_VERSION);
        //App get crash on this line
        sqLiteDatabase = sqLiteHelper.getWritableDatabase("password");
        return this;
    }


    public CRMDB openToRead() throws SQLiteFullException {
        sqLiteHelper = new SQLiteHelper(context, MYDATABASE_NAME + "_" + empid + ".db", null, MYDATABASE_VERSION);
        sqLiteDatabase = sqLiteHelper.getReadableDatabase("password");
        return this;
    }


    public long insertData(String tablename, ContentValues contentvalue) {
        return sqLiteDatabase.insert(tablename, null, contentvalue);
    }

    public Cursor getData(String query) {
        Cursor c = sqLiteDatabase.rawQuery(query, null);
        return c;
    }

    public long updateData(String tablename, ContentValues contentvalue, String where, String whereArgs[]) {
        return sqLiteDatabase.update(tablename, contentvalue, where, whereArgs);
    }

    public class SQLiteHelper extends SQLiteOpenHelper {

        public SQLiteHelper(Context context, String name, CursorFactory factory, int version) {
            super(context, name, factory, version);

        }

        @Override
        public void onCreate(SQLiteDatabase db) {
            db.execSQL(tb_task_createtable);
            db.execSQL(tb_calls_createtable);
            db.execSQL(tb_messages_table);
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

        }
    }
}

Пожалуйста, помогите мне понять это.

1 Ответ

2 голосов
/ 10 мая 2019

Обсуждение в вашей второй ссылке показывает, как настроить SQLiteDatabaseHook для этого:

    SQLiteDatabaseHook mHook = new SQLiteDatabaseHook() {
        public void preKey(SQLiteDatabase database) {
        }

        public void postKey(SQLiteDatabase database) {
            database.rawExecSQL("PRAGMA cipher_compatibility=3;");
            database.rawExecSQL("PRAGMA kdf_iter=1000;");
            database.rawExecSQL("PRAGMA cipher_default_kdf_iter=1000;");
            database.rawExecSQL("PRAGMA cipher_page_size = 4096;");
        }
    };

Затем измените:

    public SQLiteHelper(Context context, String name, CursorFactory factory, int version) {
        super(context, name, factory, version);

    }

до:

    public SQLiteHelper(Context context, String name, CursorFactory factory, int version) {
        super(context, name, factory, version, mHook);
    }

для доставки крючка конструктору SQLiteOpenHelper.

...