我使用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可能有权限问题,我会检查一下! 非常感谢你的帮助!答案 0 :(得分:0)