2015-04-21 2 views
0

Я уже скомпилировал SQLCipher для Windows и шифровал/дешифровал файл базы данных с помощью SQLCipher в командной строке.

Проблема заключается в последней части this tutorial, когда я использую SQLCipher в Visual Studio.

Похоже, что приложение пропускает эту строку кода, потому что оно не шифрует ни дешифрование, я не получаю никаких ошибок.Использование SqlCipher в Visual Studio

if (sqlite3_exec(db, (const char*)"PRAGMA key ='password'", NULL, NULL, NULL) == SQLITE_OK){ 
      printf("Accepted Key\n"); 
     }; 

Может ли кто-нибудь сказать мне, что случилось? или предоставить некоторый пример кода С? Спасибо заранее.

ответ

0

Здесь есть несколько пунктов. Во-первых, проверка на SQLITE_OK в качестве кода состояния от sqlite3_exec не означает, что предоставленный пароль действителен для базы данных. Для того, чтобы подтвердить, что после того, как база данных была ключом, мы рекомендуем выполнить запрос, такие как:

SELECT count(*) FROM sqlite_master;

Эта таблица всегда будет присутствовать, независимо от состояния вашей схемы приложения.

Далее, чтобы убедиться, что вы правильно интегрировали библиотеку SQLCipher в своем приложении, мы можем запросить базу данных для PRAGMA cipher_version;, представленной библиотекой. Ниже приведен образец для этого:

int rc; 
sqlite3 *db; 
sqlite3_stmt *stmt; 

rc = sqlite3_open(":memory:", &db); 
if(rc != SQLITE_OK){ 
    printf("failed to open database\n"); 
} 
rc = sqlite3_prepare(db, "PRAGMA cipher_version;", -1, &stmt, NULL); 
rc = sqlite3_step(stmt); 
if(rc == SQLITE_ROW){ 
    printf("SQLCipher version:%s\n", sqlite3_column_text(stmt, 0)); 
} 
sqlite3_finalize(stmt); 
if(db != NULL){ 
    sqlite3_close(db); 
} 
Смежные вопросы