我正在尝试添加到我的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");
}
}
有什么建议吗?
答案 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)
听起来你需要提交你的交易。您似乎已经达到了单个事务中行数的限制。