【问题标题】:How to extract data searching by name from sqlite?如何从sqlite中提取按名称搜索的数据?
【发布时间】:2012-02-26 03:17:25
【问题描述】:

我遵循了有关创建 sqlite 数据库、向其中插入数据和从中搜索数据的教程,并使用以下方法从该数据库中提取数据:

-(IBAction)findContacts{

    const char *dbpath = [databasePath UTF8String];
    sqlite3_stmt *statement;
    if (sqlite3_open(dbpath, &contactDB)==SQLITE_OK) {
        NSString *querySQL = [NSString stringWithFormat:@"SELECT adress, phone FROM CONTACTS WHERE name = \"%@\"", [name text]];
        status.text = querySQL;         
        const char *query_stmt = [querySQL UTF8String];

        if (sqlite3_prepare_v2(contactDB, query_stmt, -1, &statement, NULL) == SQLITE_OK) {
            if (sqlite3_step(statement)==SQLITE_ROW) {

                NSString *adressField = [[NSString alloc] initWithUTF8String:(const char *) sqlite3_column_text(statement, 0)];
                adress.text = adressField;

                NSString *phoneField = [[NSString alloc] initWithUTF8String:(const char *) sqlite3_column_text(statement, 1)];
                phone.text = phoneField;

                status.text = @"Match Found";

                [adressField release];
                [phoneField release];} 

                    status.text = @"Match not Found";
                    adress.text = @"";
                    phone.text = @"";
            sqlite3_finalize(statement);}
        sqlite3_close(contactDB);}}

当我编译时,没有错误!没注意!但是不起作用...

我发现是因为

sqlite3_prepare_v2(contactDB, query_stmt, -1, &statement, NULL) == SQLITE_OK)

不相等,代码没有进入 if 语句。我发现当我用

反转条件时
sqlite3_prepare_v2(contactDB, query_stmt, -1, &statement, NULL) != SQLITE_OK)

并在 status.text 中看到“未找到匹配项”。但还是没能在里面找到真正的联系方式。

你发现代码有什么问题吗?

提前谢谢...

【问题讨论】:

    标签: database sqlite search prepared-statement


    【解决方案1】:

    除非'sqlite3_prepare_v2'的结果实际上是SQLITE_OK,否则你真的不想进入块。

    将相等性要求更改为 '!=' 是一个有趣的诊断,但显然这不是应永久保留在测试代码中的更改。

    既然我们知道 sqlite3_prepare_v2 不会返回成功代码,那么要问的问题是:它返回什么代码

    根据文档,它必须返回此处显示的代码之一:

    http://sqlite.org/c3ref/c_abort.html

    您还可以使用“sqlite3_errmsg”来获取字符串表示形式。见:http://sqlite.org/c3ref/errcode.html

    【讨论】:

    • 在您的帮助下解决了。谢谢阙阙... :)
    猜你喜欢
    • 2018-04-23
    • 2018-01-13
    • 2020-02-03
    • 2013-11-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-05
    • 1970-01-01
    • 2020-10-24
    相关资源
    最近更新 更多