Android, SQLite: в присоединенной базе данных нет таких исключений таблиц - PullRequest
1 голос
/ 21 декабря 2011

При попытке скопировать данные в присоединенную базу данных (db), зашифрованные с помощью SQLCipher из простой базы данных (source), я получаю исключение «нет такой таблицы».

    StringBuilder attachDatabase = new StringBuilder();
    attachDatabase.append("ATTACH DATABASE '").append(this.db.getPath()).
                    append("' as ").append(NEW_DB_ALIAS).
                    append(" KEY '").append("123").append("';");
    source.execSQL(attachDatabase.toString());

    StringBuilder copyTable = new StringBuilder();
    String table = "t1";
    copyTable.append("INSERT INTO ").append(NEW_DB_ALIAS).append(".").append(table).
                append(" SELECT * FROM ").append(table).append(";");
    db.execSQL(copyTable.toString());

Зашифрованная база данныхсоздан и имеет ту же схему, что и незашифрованная.В чем может быть проблема?

1 Ответ

0 голосов
/ 23 декабря 2011

Не могли бы вы проверить, какую версию SQLCipher для Android вы используете?Недавно мы выпустили 1.0 библиотек, которые вы можете получить здесь: https://github.com/downloads/guardianproject/android-database-sqlcipher/SQLCipherForAndroid-SDK-0.0.6-FINAL.zip

Я только что пробежал по следующему сценарию, где новый файл базы данных не существует до выполнения и работает хорошо.Можете ли вы попробовать сделать это, не создавая сначала новую базу данных со схемой:

    String newKey = "foo";
    File newDatabasePath = getDatabasePath("new.db");
    String attachCommand = "ATTACH DATABASE ? as encrypted KEY ?";
    String createCommand = "create table encrypted.t1(a,b)";
    String insertCommand = "insert into encrypted.t1 SELECT * from t1";
    String detachCommand = "DETACH DATABASE encrypted";
    encryptedDatabase.execSQL(attachCommand, new Object[]{newDatabasePath.getAbsolutePath(), newKey});
    encryptedDatabase.execSQL(createCommand);
    encryptedDatabase.execSQL(insertCommand);
    encryptedDatabase.execSQL(detachCommand);
...