gpt4 book ai didi

ios - sqlite 准备语句

转载 作者:行者123 更新时间:2023-11-28 22:53:45 24 4
gpt4 key购买 nike

我正在尝试从 ios 应用程序中的 sqlite 数据库读取数据。当我运行该应用程序时,它能够打开数据库,但在日志文件中显示消息 - “准备语句有问题”。我不知道我的 prepare 语句有什么问题这是我的代码 -

-(NSString *)dataFilePath{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
return [documentsDirectory stringByAppendingPathComponent:kFilename];
}

viewDidLoad 我有 -

- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
myarray = [[NSMutableArray alloc]init];

sqlite3 *database;
if(sqlite3_open([[self dataFilePath]UTF8String], &database)!=SQLITE_OK){
sqlite3_close(database);
NSAssert(0, @"Failed to open database");
}

const char *createSQL = @"SELECT ID, TITLE FROM FIRST ORDER BY TITLE;"; //first is the table in the database
sqlite3_stmt *sqlStmt;
if(sqlite3_prepare_v2(database, [createSQL UTF8String], -1, &sqlStmt, nil)!=SQLITE_OK){
NSLog(@"Problem with prepare statement"); //this is where the code gets stuck and I don't know why
}else{

while(sqlite3_step(sqlStmt)==SQLITE_ROW){
NSInteger number = sqlite3_column_int(sqlStmt, 0);
NSString *title = [NSString stringWithUTF8String:(char *) sqlite3_column_text(sqlStmt, 1)];
[myarray addObject:title];
}
sqlite3_finalize(sqlStmt);
}
sqlite3_close(database);
}

最佳答案

如果您的 prepare 语句失败,而不是仅仅报告“Problem with prepare statement”,请尝试检索错误消息,例如,

NSLog(@"%s Prepare failure '%s' (%1d)", __FUNCTION__, sqlite3_errmsg(database), sqlite3_errcode(database));

这可能会让您更好地了解问题。

我过去看到的一个问题是可能找不到数据库(因为它没有包含在包中,名称中的拼写错误等)但是标准的 sqlite3_open如果它不存在,函数将创建它,因此 sqlite3_open 将成功,但不会在新创建的空白数据库中找到有问题的表。比 sqlite3_open 更好的是:

sqlite3 *database;
if (sqlite3_open_v2([[self dataFilePath] UTF8String], &database, SQLITE_OPEN_READWRITE, NULL) != SQLITE_OK) {
sqlite3_close(database); // not sure you need to close if the open failed
NSAssert(0, @"Failed to open database");
}

这样,如果找不到数据库,您会收到警告。但是如果你已经完成了 sqlite3_open,你可能有一个空白的数据库,所以你可能想要重置你的模拟器和/或从你的设备中删除应用程序,然后再尝试使用 sqlite3_open_v2.

关于ios - sqlite 准备语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11242298/

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