未加密的数据库不是由net.sqlcipher.database.SQLiteDatabase创建的

时间:2013-07-04 09:39:33

标签: android encryption android-sqlite sqlcipher

在我的Android应用程序中,我需要为用户提供创建加密或非加密数据库的选项;数据库将保存在设备SD卡中。

对于我正在使用的非加密数据库: -

db = SQLiteDatabase.openOrCreateDatabase(DB_PATH + DB_NAME,“”,null);

但是当我通过命令行打开数据库时,它会出错:文件已加密或不是数据库。 所以上面的代码行总是创建加密数据库。

我的代码如下:

if(db == null){
    try{
        SQLiteDatabase.loadLibs(context);
        String encryptStr = "";

        if(new File(DB_PATH + DB_NAME).exists()){
            db = SQLiteDatabase.openOrCreateDatabase(DB_PATH + DB_NAME, encryptStr, null);
        }else{

            db = SQLiteDatabase.openOrCreateDatabase(DB_PATH + DB_NAME, encryptStr,          null);
            executeSchema(context);
        }

        db.setVersion(1);
        db.setLocale(Locale.getDefault());
        db.setLockingEnabled(true);
    }catch(Exception e){
        db = null;
        AlertHelper.logError(e);
    }
}

在android中使用sqlcipher创建非加密数据库的方法吗?

2 个答案:

答案 0 :(得分:1)

我得到了答案。使用空字符串作为密码会创建未加密的数据库。我的问题是我使用命令行检查数据库;它不支持sqlcipher.database,因此它始终将db作为加密方式返回。

我使用eclpise中的“pull”按钮从设备中取出数据库,然后在Lita(用于查看数据库的软件)中打开它。带空键的数据库打开,但是非空键表示数据库已加密,因此无法打开。

答案 1 :(得分:0)

你确定你使用了正确的方法吗?

我找不到

db = SQLiteDatabase.openOrCreateDatabase(DB_PATH + DB_NAME,“”,null);

方法,

我只看到这些方法:

SQLiteDatabase.openOrCreateDatabase(文件,工厂)

SQLiteDatabase.openOrCreateDatabase(路径,工厂)

SQLiteDatabase.openDatabase(路径,工厂,标志)