2011-12-21 2 views
1

일반 데이터베이스 (source)에서 SQLCipher로 암호화 된 첨부 데이터베이스 (db)에 데이터를 복사하려고하면 "해당 테이블이 없습니다"라는 예외가 발생합니다.안드로이드, SQLite : 첨부 된 데이터베이스에서 해당 테이블 예외 없음

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()); 

암호화 된 데이터베이스가 만들어지고 암호화되지 않은 것과 동일한 체계가 있습니다. 무엇이 문제 일 수 있습니까?

+0

이것을 파악한 적이 있습니까? – Phil

+0

아니요 어떻게 든 해결할 수 있었습니까? 세부 사항을 기억하지 못했습니다 – Asahi

답변

0

사용중인 Android 용 SQLCipher의 버전을 확인할 수 있습니까? 우리는 당신이 여기에 올 수있는 라이브러리 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); 
+0

Android v1 (0.0.6-RC1) – Asahi

+0

에 SQLCipher를 사용하고 있습니다. 두 데이터베이스에서 SQLite의 SQLCipher 빌드의 sqlite3을 사용하여 ".schema"명령을 실행할 수 있습니까? 이렇게하면 두 스키마가 동일하다는 것을 확인할 수 있습니다. –

+0

원하는 경우 확인을 위해 다음 코드를 실행할 수도 있습니다 (NEW_DB_ALIAS를 사용자 값으로 대체하십시오). select * from sqlite_master; select *에서 NEW_DB_ALIAS.sqlite_master; –

관련 문제