无法在xcode中加载sqlite数据库

时间:2012-04-24 13:02:59

标签: xcode sqlite path

我使用SqlManager在sqlite中创建了一个简单的数据库,然后我在一个简单的xcode项目中将我的资源中的文件(Person.sqlite)复制并使用此代码到达数据库,但数据库似乎没有加载。 init中的函数sqlite3_open返回0(一切正常),而getAllPersons中的sqlite3_prepare返回无法在数据库中找到我的数据库中的表“Persona”,所以我相信问题是我无法访问真正的数据库。可能是开放的,没有找到数据库,创建一个新的空的...所以为什么会发生这种情况?我给出数据库路径的方式不正确? ([[NSBundle mainBundle] pathForResource:@“Persone”ofType:@“sqlite”];)真的,定义路径的变量(sqLiteDb)上的nslog返回null,但我尝试了几种其他方法来调用此路径,但所有都是错...

- (id)init
{
    self = [super init];
    if (self) {
        NSString *sqlLiteDb = [[NSBundle mainBundle] pathForResource:@"Persone" ofType:@"sqlite"];
        NSLog(@"Path db: %@",sqlLiteDb);
        if(sqlite3_open([sqlLiteDb UTF8String], &database) != SQLITE_OK){
            NSLog(@"Failed to open database");
        }else {
            NSLog(@"Database opened");
        }
    }

    return self;
}

- (NSArray *) getAllPersons{
    NSMutableArray *returnArray=[[NSMutableArray alloc] init];
    NSString *query= @"SELECT Nome FROM Persona";    
    sqlite3_stmt *statement;
    NSLog(@"%d", sqlite3_prepare_v2(database, [query UTF8String], -1, &statement, NULL));
    printf( "could not prepare statemnt: %s\n", sqlite3_errmsg(database) );


    if (sqlite3_prepare_v2(database, [query UTF8String], -1, &statement, NULL) == SQLITE_OK){
        NSLog(@"kndvnspò");
       while (sqlite3_step(statement)==SQLITE_ROW) {
            int uniqueId = sqlite3_column_int(statement, 0);
            char *nomeChar =(char *) sqlite3_column_text(statement, 1);
            char *cognomeChar =(char *) sqlite3_column_text(statement, 2);
            NSString *nome= [[NSString alloc] initWithUTF8String:nomeChar];
            NSString *cognome= [[NSString alloc] initWithUTF8String:cognomeChar];

            PersonInfo *info= [[PersonInfo alloc] initWithUniqueId:uniqueId nome:nome cognome:cognome];
            [returnArray addObject:info];
        }
        sqlite3_finalize(statement);
    }
    return returnArray;

}

抱歉,我相信解决方案很容易,但我仍然不喜欢xcode ^^谢谢!

更新:不,它一直是“Persone”。经过两个小时的失败和这个问题的开启,我终于想到了“那么,为什么不使用干净?它永远不会工作,但给它一个机会......”显然,它有效... 。-_-' 出于某种原因,该项目只需要干净......无论如何,谢谢你的帮助!


正如我在更新中所说,出于某种原因,该项目只需要干净......

肯定打电话准备两次不是个好主意。对不起,我发布的代码很脏,只是为了测试而使用的代码。 很高兴知道open可能有权限问题,我会检查一下! 非常感谢你的帮助!

1 个答案:

答案 0 :(得分:0)

由于对DB文件的权限并且放置了整个目录文件,因此sqlite经常因打开而失败。