2017-04-04 61 views
0

我使用GreenDAO庫 我已經面臨SQL例外,從舊版本的加密Android中現有的數據庫升級後新 例: 1.0版:數據庫未加密 2.0版本:數據庫進行加密 使用1.0現有用戶升級到2.0 我得到異常調用此之後,在此之前我必須在升級加密舊的數據庫。這個怎麼做?如何使用GreenDAO庫

helper.getEncryptedWritableDb(password); 



net.sqlcipher.database.SQLiteException: file is encrypted or is not a database: , while compiling: select count(*) from sqlite_master; 
at net.sqlcipher.database.SQLiteCompiledSql.native_compile(Native Method) 
at net.sqlcipher.database.SQLiteCompiledSql.compile(SQLiteCompiledSql.java:91) 
at net.sqlcipher.database.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:64) 
at net.sqlcipher.database.SQLiteProgram.<init>(SQLiteProgram.java:84) 
at net.sqlcipher.database.SQLiteQuery.<init>(SQLiteQuery.java:49) 
at net.sqlcipher.database.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:42) 
at net.sqlcipher.database.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1820) 
at net.sqlcipher.database.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1785) 
at net.sqlcipher.database.SQLiteDatabase.keyDatabase(SQLiteDatabase.java:2439) 
at net.sqlcipher.database.SQLiteDatabase.openDatabaseInternal(SQLiteDatabase.java:2368) 
at net.sqlcipher.database.SQLiteDatabase.openDatabase(SQLiteDatabase.java:1149) 
at net.sqlcipher.database.SQLiteDatabase.openDatabase(SQLiteDatabase.java:1041) 
at net.sqlcipher.database.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:249) 
at net.sqlcipher.database.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:214) 
at org.greenrobot.greendao.database.DatabaseOpenHelper.getEncryptedWritableDb(DatabaseOpenHelper.java:134) 
at org.broadsoft.iris.datamodel.db.DatabaseManager.openWritableDb(DatabaseManager.java:149) 
at org.broadsoft.iris.datamodel.db.DatabaseManager.openReadableDb(DatabaseManager.java:129) 
at org.broadsoft.iris.datamodel.db.DatabaseManager.getContactIdsInMessageHistory(DatabaseManager.java:461) 
at org.broadsoft.iris.http.HttpManagerV2.lambda$fetchVCards$2(HttpManagerV2.java:573) 
at org.broadsoft.iris.http.HttpManagerV2.access$lambda$2(HttpManagerV2.java) 
at org.broadsoft.iris.http.HttpManagerV2$$Lambda$3.run(Unknown Source) 
at java.lang.Thread.run(Thread.java:761) 

回答

0

從SQLite(未加密)到SQLCipher(加密)沒有「升級」。這是一個輪廓如何做到這一點:

  1. 打開的SQLite數據庫
  2. 打開SQLCipher DB不同的名稱,以確保不同的DB文件從SQLite的使用
  3. 讀取數據
  4. 將數據寫入SQLCipher