gpt4 book ai didi

iOS Sqlite3 SQLITE_ERROR

转载 作者:行者123 更新时间:2023-11-28 20:33:50 26 4
gpt4 key购买 nike

我在 iOS 应用程序中有一个函数,它从数据库中读取一些数据。功能极其简单:

-(void) readCategories {
sqlite3 *database;

if([[NSFileManager defaultManager] fileExistsAtPath:databasePath]){
if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) {
const char *sqlStatement = "SELECT * FROM Categories ORDER BY name COLLATE NOCASE ASC";
sqlite3_stmt *compiledStatement;
int errorCode = sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL);

if(errorCode == SQLITE_OK) {
while(sqlite3_step(compiledStatement) == SQLITE_ROW) {
[categories addObject:[NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 1)]];
}
} else {
NSLog(@"Error reading categories. Code: %d, message: '%s'", errorCode,sqlite3_errmsg(database));
}
sqlite3_finalize(compiledStatement);
sqlite3_close(database);
} else {
NSLog(@"Error opening DB");
}
} else {
NSLog(@"DB does not exist.");
}
}

问题是 errorCode 始终是 SQLITE_ERROR,根据文档是:“SQL 错误或缺少数据库”。给出的消息是:'没有这样的表:类别'

现在,如果我查看计算机上的数据库文件,表格显然就在那里。我也可以对它运行完全相同的查询并且它工作正常。

有没有人知道出了什么问题?

谢谢。

最佳答案

如果您在添加 [[NSFileManager defaultManager] fileExistsAtPath:databasePath] 检查之前运行过此代码,则标准 sqlite3_open 将为您创建一个空白数据库,如果它没有找到一个。所以,

  1. 通过模拟器菜单上的“重置内容和设置...”重置您的模拟器。这将清除过去可能创建的任何无关的数据库文件。 (如果您在设备上执行此操作,请删除该应用,然后重新安装。)

  2. 如果找不到,sqlite3_open 命令将创建空白数据库。为了安全起见,以后请使用 sqlite3_open_v2 代替,它永远不会创建空白数据库:

    if (sqlite3_open_v2([databasePath UTF8String], &database, SQLITE_OPEN_READWRITE, NULL) != SQLITE_OK) {
    // handle opening error here
    }

    通过使用sqlite3_open_v2,将确保在打开过程中永远不会创建数据库。

  3. 如果您仍然遇到问题,请导航至计算机上模拟器的目录,即“~/Library/Application Support/iPhone Simulator”。 (您可能必须通过在终端窗口中键入以下命令来取消隐藏您的库文件夹:

    chflags nohidden ~/Library

    尝试检查那里的数据库(而不是 Xcode 项目中的版本)并查看数据库是否包含您期望的所有表。

  4. 如果完成所有这些操作后,您没有看到数据库被复制到您的模拟器/设备,请确保您已设置目标的构建阶段设置,以便通过“复制捆绑资源”包含数据库".

  5. 正如其他人所建议的,每当您遇到 SQLITE_ERROR 时,请务必通过类似 NSLog(@"%s SQLITE_ERROR '%s' (%1d) ", __FUNCTION__, sqlite3_errmsg(数据库), sqlite3_errcode(数据库));

关于iOS Sqlite3 SQLITE_ERROR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11310893/

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