Iphone 加载视图期间sqlite3_步骤返回代码21

Iphone 加载视图期间sqlite3_步骤返回代码21,iphone,objective-c,sqlite,Iphone,Objective C,Sqlite,在试用sqlite时,我想用数据库中的数据初始化一个列表视图。我的消息来源如下: -(void) initTheList { sqlite3 *db; int rows = 0; const char* dbFilePathUTF8 = [searchTermDBLocation UTF8String]; int dbrc = sqlite3_open( dbFilePathUTF8, &db ); // count if (dbrc) { NSLog( @"Could no

在试用sqlite时,我想用数据库中的数据初始化一个列表视图。我的消息来源如下:

-(void) initTheList {
sqlite3 *db;
int rows = 0;

const char* dbFilePathUTF8 = [searchTermDBLocation UTF8String];
int dbrc = sqlite3_open( dbFilePathUTF8, &db );

// count
if (dbrc) {
    NSLog( @"Could not open the DB" );
} else {
    NSString *queryStatementNS = @"select count(*) from article";
    const char* queryStatement = [queryStatementNS UTF8String];

    sqlite3_stmt *dbps;
    dbrc = sqlite3_prepare_v2(db, queryStatement, -1, &dbps, NULL);

    if (sqlite3_step(dbps) == SQLITE_ROW) {
        rows = sqlite3_column_int(dbps, 0);
    } else {
        NSLog(@"SQL step failed code: %d", sqlite3_step(dbps));
        NSLog(@"Attempted Query: %@", queryStatementNS);
    }

    [queryStatementNS release];
}

if (rows > 1000) { ... } else { ... };
...
事实上,我认为在加载视图后,最好只对代码进行一次envoke。因此,我将数组的初始化和方法调用添加到:

- (void)loadView {
   [super loadView];
   tableData = [[NSMutableArray alloc] initWithObjects:nil];
   [self initTheList];
}
但是,执行此操作时,sqlite3_步骤返回x15(SQLITE_21/*库未正确使用*/)。如果我将调用该方法的代码放在numberOfRowsInSection方法中,调用工作正常


谁能给我一个提示,我可以在哪里了解更多关于生命周期以及与sqlite数据库的关系?让我惊讶的是,我可以打开数据库,但读取失败,而放在方法中的相同代码显然在以后某个时间点被调用,效果很好。

我自己也遇到了错误代码21问题(“库使用不正确”)。我在Web上找不到任何有用的答案,我正要得出结论,XCode中的SQLite3库中存在一些bug。然后,我终于发现了我的问题:我的SQL中有一个微妙的输入错误

错误发生在INSERT或REPLACE语句期间。但那句话本身并没有错别字,所以我很长一段时间都没发现自己错在哪里。数据库文件正在创建中,因此我对其运行了一个(Unix)strings命令,发现在创建表的过程中,我在一个字段名中创建了一个输入错误。该表创建得很好,但字段名错误。在执行插入或替换时,我使用了正确的字段名。啊!!不匹配导致了错误

我不知道这是否是你的问题;但在创建SQL语句时很容易出错,而且它们并不总是很容易找到(正如我今天下午向自己演示的那样)。如果我是你,我会仔细检查你所有的陈述


希望这有帮助

我自己也遇到了错误代码21问题(“库使用不正确”)。我在Web上找不到任何有用的答案,我正准备断定XCode中的SQLite3库中存在一些bug。然后,我终于发现了我的问题:我的SQL中有一个微妙的输入错误

错误发生在INSERT或REPLACE语句期间。但那句话本身并没有错别字,所以我很长一段时间都没发现自己错在哪里。数据库文件正在创建中,因此我对其运行了一个(Unix)strings命令,发现在创建表的过程中,我在一个字段名中创建了一个输入错误。该表创建得很好,但字段名错误。在执行插入或替换时,我使用了正确的字段名。啊!!不匹配导致了错误

我不知道这是否是你的问题;但在创建SQL语句时很容易出错,而且它们并不总是很容易找到(正如我今天下午向自己演示的那样)。如果我是你,我会仔细检查你所有的陈述


希望这有帮助

今天我发现,如果准备好的语句指针恰好为NULL(零),则sqlite3_步骤()返回错误21。

今天我发现,如果准备好的语句指针恰好为NULL(零),则sqlite3_步骤()返回错误21。

因为您正在试验SQLite,这意味着您对它不熟悉。除非您对SQLite有非常明确的需求,否则请改为探索核心数据。编写原始SQL通常是浪费时间。感谢您的建议,我将调查核心数据。但是,我仍然感兴趣的是,为什么从sqlite数据库中选择数据在一种情况下有效,而在另一种情况下无效。因为您正在试用sqlite,这意味着您是新手。除非您对SQLite有非常明确的需求,否则请改为探索核心数据。编写原始SQL通常是浪费时间。感谢您的建议,我将调查核心数据。但是,我仍然感兴趣的是,为什么从sqlite DB中选择数据在一种情况下有效,而在另一种情况下无效。