objective-c - sqlite3_prepare_v2 正在获取 SQLITE_ERROR

标签 objective-c xcode sqlite

我已经为此工作了几个小时,必须让它工作!它阻碍了 iPhone 应用程序的发布...我第一次使用 SQLite。我已遵循所有建议,但我的 sqlite3_prepare_v2 调用每次都会收到 SQLITE_ERROR (1)!

这是我的 Controller 中的代码:

        NSString *query = @"SELECT * FROM QandA ORDER BY random() LIMIT 1";
//  const char *sqlStatement = "SELECT * FROM QandA ORDER BY random() LIMIT 1";
    sqlite3_stmt *compiledStatement;

    // sqlite3_stmt *statement;
    int prepareStatus = sqlite3_prepare_v2(database, [query UTF8String],
                                           -1, &compiledStatement, NULL);
    if (prepareStatus == SQLITE_OK) {...

您会注意到,我尝试使用“char *”也无济于事(以及其他尝试)。我的数据库可以正常打开:

    databaseName = @"Facts.sqlite";
// Get the path to the documents directory and append the databaseName
NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDir = [documentPaths objectAtIndex:0];
databasePath = [documentsDir stringByAppendingPathComponent:databaseName];
NSLog(@"databasePath = %@", databasePath);

int dbOpenStatus = sqlite3_open_v2([databasePath UTF8String], &database, SQLITE_OPEN_READWRITE, NULL);

从我的 Controller 界面:

    NSString *databaseName;
NSString *databasePath;

我已经检查了调试器,一切看起来都很好,但是准备语句失败了。我不知道如何记录它试图编译的语句...我假设/希望这正是我的 SELECT 所说的。

有人可以帮忙吗?我很绝望。标记

最佳答案

找到答案here 。我必须使用它来代替数据库文件的路径:

[[NSBundle mainBundle]pathForResource:@"Facts"extension:@"sqlite"];

这给出了一个稍微不同的路径(一个额外的目录) - 一旦我使用它,它就起作用了!希望这对其他人有帮助...我在这方面花了很多时间。

关于objective-c - sqlite3_prepare_v2 正在获取 SQLITE_ERROR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5136027/

相关文章:

c - SQLite3 : the database was created empty?

c# - 使用 Xamarin 连接到远程 MySQL

iphone - iO4 上只有 MPMoviePlayerController 的音频

ios - iPhone:如何获取 xib 中项目的大小?

objective-c - UILabel中如何控制行距

ios - 我如何在 Swift Playground 中使用 Realm?

XCode 禁用电视输出窗口

android - ORMLite 尝试在没有@DatabaseField 注释的情况下加载字段

objective-c - 不可能在钥匙串(keychain)中存储电子邮件 (KeychainItemWrapper)

iphone - 试图在 iPhone 应用程序更新中覆盖 sqlite 数据库