【发布时间】:2014-07-24 10:54:25
【问题描述】:
我的应用程序中有一个现有的 sqlite 数据库。它运行成功。现在我需要使用 sqlcipher 加密数据库。我的问题是在将 sqlite 转换为加密时出现以下异常。
net.sqlcipher.database.SQLiteException: table android_metadata already exists
at net.sqlcipher.database.SQLiteDatabase.native_rawExecSQL(Native Method)
at net.sqlcipher.database.SQLiteDatabase.rawExecSQL(SQLiteDatabase.java:1851)
at com.x.y.convert_sqlite_to_sqlcipher(Practitioner_menu.java:2626)
at com.x.y$AdminProcess.doInBackground(Practitioner_menu.java:1659)
at com.x.y$AdminProcess.doInBackground(Practitioner_menu.java:1)
at android.os.AsyncTask$2.call(AsyncTask.java:287)
at java.util.concurrent.FutureTask.run(FutureTask.java:234)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
at java.lang.Thread.run(Thread.java:856)
我的转换代码:
File old_sqliteFile = getDatabasePath("old_db.sqlite");
File databaseFile = getDatabasePath("new_db.db");
databaseFile.mkdirs();
databaseFile.delete();
database = SQLiteDatabase.openOrCreateDatabase(databaseFile,
"password", null);
database.rawExecSQL(String.format(
"ATTACH DATABASE '%s' AS encrypted KEY '%s'",
databaseFile.getAbsolutePath(), "password");
database.rawExecSQL("select sqlcipher_export('encrypted')");
database.rawExecSQL("DETACH DATABASE encrypted");
database.close();
请任何人帮助我找出我做错了什么?
【问题讨论】:
-
@maven 我认为我们的问题几乎相同,但错误不同。你是如何解决这个问题的?