我正在尝试从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);
答案 0 :(得分:0)
我的代码几乎相同,我认为你的代码没有任何问题。错误26是(根据sqlite3.h)"打开的文件不是数据库文件"。
我用一个文本文件的路径尝试了我的代码,并从sqlite3_prepare_v2()得到了result = 1 - 所以sqlite3_open()通过而没有失败。我怀疑您的文件不是sqLite文件,或者可能已损坏。
尝试使用sqLite编辑器应用程序打开它来验证数据库文件的完整性。记录路径以验证它不会受到伤害。如果路径中有空格,他们可能需要逃脱 - 或者不是,我无法回想起。
希望这会有所帮助。