gpt4 book ai didi

objective-c - 无法从 sqlite3 数据库中选择

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:16:04 24 4
gpt4 key购买 nike

我在读取 sqlite3 数据库时遇到一些问题。

-(void) readMessengesFromDatabase {
sqlite3 *database;

messenges = [[NSMutableArray alloc] init];

if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) {
NSLog(@"Connection OK");
const char *sqlStatement = "select * from MessagesData";
sqlite3_stmt *compiledStatement;
if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK) NSLog(@"connect to table OK"); else NSLog(@"connect to table FALSE");
if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK) { //не проходит условие
NSLog(@"Connection to table OK");
while(sqlite3_step(compiledStatement) == SQLITE_ROW) {
NSLog(@"Read rows OK");
NSString *dbMessageID = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 0)];
NSString *dbMessageText = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 1)];
NSString *dbMessageDate = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 2)];
NSString *dbMediaOrNot = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 3)];

Message *messege = [[Message alloc] initWithName:dbMessageText messageID:dbMessageID messageDate:dbMessageDate mediaOrNot:dbMediaOrNot];

[messenges addObject:messege];

[messege release];
}
}
sqlite3_finalize(compiledStatement);
}
sqlite3_close(database);
}

我的第一个 NSLog 向我显示了与数据库的连接是正常的。但是下一步“select * from MessagesData”和 if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK) NSLog(@"connect to table OK"); else NSLog(@"connect to table FALSE"); 显示“connect to table FALSE”。尝试使用终端从我的数据库表中进行选择,但出现错误 "unable to open database file" 。我的错误在哪里?我在我的代码中没有看到任何问题...

最佳答案

如果您打印 sqlite3_prepare_v2 返回的错误代码,诊断问题会容易得多。可以在 this page 上找到数值.

int errorCode = sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL);
if(errorCode != SQLITE_OK) {
NSLog(@"Connect to table failed: %d", errorCode);
}

但是,如果您甚至无法在 sqlite3 命令行工具中从数据库中进行选择,我建议您检查该文件是否存在、是否可读且格式是否正确。

尝试在您的模拟器中重现错误(如果失败,请将数据库文件复制到您的计算机,例如使用 Organizer)。尝试使用 sqlite3 运行查询(我知道您确实尝试过,但请确保您正在检查以下内容)。

如果您收到消息 Error: file is encrypted or is not a database,这意味着数据库文件已损坏。如果您得到 Error: no such table:,这意味着您的数据库不存在、为空,或者只是没有得到该表。如果你得到(如你的问题):Error: unable to open database(你在打开 sqlite 时得到这个,而不是在执行查询时得到),这意味着 sqlite 无法读取文件(对于示例权限)。

关于objective-c - 无法从 sqlite3 数据库中选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10072646/

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