gpt4 book ai didi

objective-c - xCode sqlite查询

转载 作者:行者123 更新时间:2023-12-03 15:30:21 24 4
gpt4 key购买 nike

这一定是一个愚蠢的问题,但我无法查询。好像我的数据库是空的(我仔细检查了,不是)。它是一个简单的SELECT * FROM table查询。这是我尝试的方式:

+(MyDatabase *)database{
if (database == nil) {
database = [[MyDatabase alloc] init];
}
return database;
}
- (id)init
{
self = [super init];
if (self) {
NSString *sqliteDb = [[NSBundle mainBundle] pathForResource:@"personsDB" ofType:@"sqlite3"];
if (sqlite3_open([sqliteDb UTF8String], &database) != SQLITE_OK) {
NSLog(@"Fail to open Database.");
}
}
return self;
}


-(NSArray *)getAllRows{
NSMutableArray *retArray = [[NSMutableArray alloc] init];
NSString *query = @"SELECT * FROM persons";

sqlite3_stmt *statement;
NSLog(@"checking SQLITE_OK?");
if (sqlite3_prepare_v2(database, [query UTF8String], -1, &statement, nil) == SQLITE_OK) {
NSLog(@"SQLITE_OK");
while (sqlite3_step(statement) == SQLITE_ROW) {
int personID = sqlite3_column_int(statement, 0);
char *personChars = (char *) sqlite3_column_text(statement, 1);
int gender = sqlite3_column_int(statement, 2);
int related = sqlite3_column_int(statement, 3);

NSString *person = [[NSString alloc] initWithUTF8String:personChars];
MyDBInfo *info = [[MyDBInfo alloc] initWithpersonID:personID person:person gender:gender related:related ];

[retArray addObject:info];
}
sqlite3_finalize(statement);
}
return retArray;
}

我认为这是所有有趣的东西。

在我的日志中,我收到 checking SQLITE_OK?,但没有 SQLITE_OK。我没有得到 Fail to open Database.,所以我假设那里一切都很好。

我的数据库已满,并且有一个名为 persons的表。我是 sqlite中的 iOS apps的新手。

谢谢。

最佳答案

  • 您确定数据库已包含在包中吗? sqlite3_open 的默认行为是SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE,因此如果尚不在设备/模拟器上,它将在您的设备/模拟器上创建,因此您不会看到Fail to open Database。如果不想使用sqlite3_open_v2,请使用SQLITE_OPEN_CREATE。无论如何,有时我会将文件添加到我的xcode项目中,但它们不会自动包含在我的捆绑软件中。在项目导航器的顶部选择目标,单击目标,在主面板中选择目标,选择“Build Phases”,然后查看您的数据库是否包含在“Copy Bundle Resources”中。
  • 可能不相关,但是我总是将数据库从分发包复制到documents文件夹(如果尚不存在)。
  • 如果未收到预期的SQLITE_OK,我将始终查看返回代码或记录我的错误消息和错误代码(这可能会报告未找到所涉及的表,这将使您确定问题所在) 。

  • 从而,
    NSLog(@"%s db err '%s' (%1d)", __FUNCTION__, sqlite3_errmsg(contactDB), sqlite3_errcode(contactDB));

    关于objective-c - xCode sqlite查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11216143/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com