SQLite的。无法添加超过1000行

时间:2012-10-29 09:10:27

标签: iphone objective-c ios sqlite fmdb

我正在尝试添加到我的SQLite数据库(使用fmdb)10k行,但写入在1000行停止。我没有任何错误或警告。我的代码:

NSString *queryString = [NSString stringWithFormat:@"insert into histories (storyid, text, date, storyurl) values (%li, ?, ?, ?)",history.storyIndex];
if ([self.db open]) {
    if([self.db executeUpdate:queryString, history.storyText, history.storyDate, history.storyUrl]) {
        NSLog(@"history added");
    } 
}

有什么建议吗?

4 个答案:

答案 0 :(得分:2)

对于有同样问题的任何人......请确保您的sqlite查看器不会将查询输出限制为1000个结果。

在同样的问题上丢失了几分钟,答案很简单!

答案 1 :(得分:1)

数据库打开放在循环之外,以便只调用一次。在10,000行的循环内重复调用它可能会导致内存问题。

在每个executeUpdate之后检查db对象上的lastErrorCode,如果lastErrorMessage为非零则检查NSLog。

通过递增计数器并使用模数运算来间隔提交,例如

counter++;
if (mod(counter,500) ){
    [self.db commit];
}

考虑使用python在iOS项目之外批量加载数据库。

答案 2 :(得分:1)

您可以尝试以下代码并查看是否有任何更改:

NSString *queryString = @"INSERT INTO histories (storyid, text, date, storyurl) 
VALUES ( ?, ?, ?, ?)";

BOOL executeUpdateStatus = NO;

if ([self.db open]) 
{
    executeUpdateStatus = [self.db executeUpdate:queryString, 
    [NSNumber numberWithLong:history.storyIndex], history.storyText,
    history.storyDate, history.storyUrl];


        if(executeUpdateStatus == YES)   
            NSLog(@"history added");
        else
            NSLog(@"history NOT added");
}

答案 3 :(得分:0)

听起来你需要提交你的交易。您似乎已经达到了单个事务中行数的限制。