sqlite3_step(statement)== SQLITE_ROW从未执行过

时间:2015-06-29 11:14:44

标签: ios objective-c

我的应用程序中有一个sqlite,一切似乎都没问题,但我的数据库方法没有执行while循环,我无法从查询中获得结果。有人可以帮助我吗?任何帮助都是合情合理的!

我也为数据库创建了一个副本,正如我在其他答案中看到的其他问题。

- (void)viewDidLoad {
    [super viewDidLoad];


    int sqlite3_open(const char *filename, sqlite3 **database);

    sqlite3 *contactDB; //Declare a pointer to sqlite database structure
    NSString *path = [[NSBundle mainBundle] pathForResource:@"verbeGeo" ofType:@"sqlite"];

    if (sqlite3_open([path UTF8String], &contactDB) == SQLITE_OK)
    {
        NSLog(@"DB is open");
    } else {
        NSLog(@"DB can be open");
    }


    NSString *querySQL = @"select id from conjugare where rowid=1";
    const char *query_stmt = [querySQL UTF8String];

    if (sqlite3_prepare_v2(contactDB, query_stmt, -1,
                           &statement, NULL) == SQLITE_OK)
    {
        NSLog(@"Statement prepared successfully");
    } else {
        NSLog(@"Statement preparation failed");

        NSLog(@"Error while creating update statement. '%s'", sqlite3_errmsg(contactDB));
        NSLog(@"%s Prepare failure '%s' (%1d)", __FUNCTION__, sqlite3_errmsg(contactDB), sqlite3_errcode(contactDB));
    }

    sqlite3_step(statement);
    sqlite3_finalize(statement);
    [self database];
       }

-(void)database{

    sqlite3 *contactDB;
    NSString *querySQL = @"select id from conjugare where rowid=1";

    const char *query_stmt = [querySQL UTF8String];

    sqlite3_prepare_v2(contactDB, query_stmt, -1, &statement, NULL);


    while (sqlite3_step(statement) == SQLITE_ROW)
    {
        NSString *idNumber =
        [[NSString alloc] initWithUTF8String:
         (const char *) sqlite3_column_text(statement, 0)];
            }
    sqlite3_finalize(statement);

}

1 个答案:

答案 0 :(得分:2)

您的sqlite3_open语句正在初始化contactDB中定义的viewDidLoad变量。 contactDB中定义的database变量是该方法的本地变量而未初始化。

1)将contactDB设为实例变量或将其传递给database

2)检查所有呼叫的错误返回(例如sqlite3_prepare_v2方法中的database)。