gpt4 book ai didi

objective-c - SQLite 不编译查询 - Objective C

转载 作者:行者123 更新时间:2023-11-29 13:40:00 25 4
gpt4 key购买 nike

我对 SQLite 函数 sqlite3_prepare_v2 有问题,它总是返回 1 个错误代码。我正在使用 SQLite 包装器 SQLitemanagerforIOS4。以前没有使用包装器也会发生同样的错误,我改用它是因为尽管语句是用 UTF8 编码的,但错误仍然发生。我用调试器检查了数据库路径,它是正确的,所以我迷路了......顺便说一下,数据库正确打开和关闭。

代码如下:

- (NSArray *)getRowsForQuery:(NSString *)sql {

NSMutableArray *resultsArray = [[NSMutableArray alloc] initWithCapacity:1];

if (db == nil) {
[self openDatabase];
}

sqlite3_stmt *statement;
const char *query = [sql UTF8String];
int prepareStatus = sqlite3_prepare_v2(db, query, -1, &statement, NULL);


while (sqlite3_step(statement) == SQLITE_ROW) {

非常感谢您的帮助。

这是传递给包装器对象的参数:

- (void)viewDidLoad
{
[super viewDidLoad];

dbManager = [[SQLiteManager alloc] initWithDatabaseNamed:@"XLO.sqlite"];

SArray *provinciaArray = [dbManager getRowsForQuery:[NSString stringWithFormat:@"SELECT provincia FROM provincias;"]];

谢谢!

彼得,这是:

- (NSError *) openDatabase {

NSError *error = nil;

NSString *databasePath = [self getDatabasePath];

const char *dbpath = [databasePath UTF8String];

#ifdef DEBUG
NSLog(@"SQL result: <%s>", dbpath );
#endif

int result = sqlite3_open(dbpath, &db);
if (result != SQLITE_OK) {
const char *errorMsg = sqlite3_errmsg(db);
NSString *errorStr = [NSString stringWithFormat:@"The database could not be opened: %@",[NSString stringWithCString:errorMsg encoding:NSUTF8StringEncoding]];
error = [self createDBErrorWithDescription:errorStr andCode:kDBFailAtOpen];
}

return error;
}

非常感谢大家!

最佳答案

因为它说数据库表不存在,所以您可能没有按照您认为的路径打开数据库。请记住,sqlite 是被动的——它会在第一次写入时创建一个数据库。

在模拟器中运行应用程序并打印出路径。然后转到终端中的该路径并使用 sqlite cmdline 确认数据库在那里并且它有表。

关于objective-c - SQLite 不编译查询 - Objective C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9445038/

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