我的应用程序中有一个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);

}

最佳答案

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

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

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

关于ios - sqlite3_step(statement)==从未执行过SQLITE_ROW,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31114242/

10-10 18:06