ошибка в выражении sqlite3_prepare_v2 - PullRequest
0 голосов
/ 20 апреля 2011

У меня есть этот код, где оператор sqlite3_prepare_v2 не возвращает ОК ... есть идеи, почему?

    // Setup the SQL Statement and compile it for faster access
    const char *sqlStatement = "SELECT * FROM CardData";
    sqlite3_stmt *compiledStatement;

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *saveDirectory = [paths objectAtIndex:0];
    NSString *databasePath = [saveDirectory stringByAppendingPathComponent:@"ppcipher.s3db"];

//  [dm openDatabaseWithPassword:password];  //  open the d/b   

    sqlite3 *database;
    if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) {
        sqlite3_key(database,password,9);
        if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK) {

Ответы [ 2 ]

1 голос
/ 21 апреля 2011

Вот несколько возможностей:

  1. Неверный databasePath, и вы создаете новую базу данных, а не открываете ту, которую считаете нужной;см. sqlite3_open_v2 и SQLITE_OPEN_READONLY, чтобы обнаружить это

  2. Схема не содержит таблицу CardData.Попробуйте распечатать схему с помощью select * from sqlite_master;

  3. Неправильный password, и базу данных невозможно расшифровать

0 голосов
/ 14 августа 2012

Я считаю, что третий аргумент в sqlite3_prepare_v2 -

«Максимальная длина zSql в байтах»

и у вас там установлено -1. Может быть, попробуйте установить его на

if(sqlite3_prepare_v2(database, sqlStatement, strlen(sqlStatement), &compiledStatement, NULL) == SQLITE_OK) {
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...