sqlite准备错误#26

时间:2014-11-09 23:17:44

标签: ios objective-c sqlite

我正在尝试从sql中的obj c数据库中读取数据。我有一个问题,因为我收到的所有时间

Prepare-error #26: file is encrypted or is not a database. 

我尝试了我在互联网上找到的所有内容(我正在寻找解决方案很多时间)。

我的代码:

sqlite3 *database;
products = [[NSMutableArray alloc]init];

if (sqlite3_open([databasePath UTF8String],&database)==SQLITE_OK) {
    NSString* sqlStatement = @"select * from products";
    const char *sql = [sqlStatement UTF8String];
    static sqlite3_stmt *compiledStatement;

    int result = sqlite3_prepare_v2(database, sql, -1, &compiledStatement, NULL);
    if(result != SQLITE_OK) {
        NSLog(@"Prepare-error #%i: %s", result, sqlite3_errmsg(database));
    }

    if(sqlite3_prepare_v2(database, sql, -1, &compiledStatement, NULL) == SQLITE_OK) {
        while (sqlite3_step(compiledStatement)==SQLITE_ROW) {
            int aId = sqlite3_column_int(compiledStatement, 1);
            NSString *aName = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 2)];
            NSString *aDescriptions = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 3)];
            double aDo = sqlite3_column_double(compiledStatement, 4);

            Product *product = [[Product alloc]initWithUniqueId:aId name:aName descriptions:aDescriptions do:aDo];
            [products addObject:product];
            NSLog(@"%@",products);
        }
    } 
    sqlite3_finalize(compiledStatement);
}
sqlite3_close(database);

1 个答案:

答案 0 :(得分:0)

我的代码几乎相同,我认为你的代码没有任何问题。错误26是(根据sqlite3.h)"打开的文件不是数据库文件"。

我用一个文本文件的路径尝试了我的代码,并从sqlite3_prepare_v2()得到了result = 1 - 所以sqlite3_open()通过而没有失败。我怀疑您的文件不是sqLite文件,或者可能已损坏。

尝试使用sqLite编辑器应用程序打开它来验证数据库文件的完整性。记录路径以验证它不会受到伤害。如果路径中有空格,他们可能需要逃脱 - 或者不是,我无法回想起。

希望这会有所帮助。