【发布时间】:2014-02-03 18:27:21
【问题描述】:
我正在使用 FMDB 实现一个基于 SQLite 的应用程序,我需要在 SQLite 中插入大量数据,比如 1000 行数据,但我不想一一插入,我只想这样做使用单个查询,这会使插入进度更快,如下所示:
NSString *query = @"insert into table (c1,c2,c3,c4) values " ;
NSString *middle = @"" ;
for ( int i = 0 ; i < 1000 ; i++ ) {
NSDictionary *tmpItem = [data objectAtIndex:i] ;
if ( i == 999 ) {
middle = [NSString stringWithFormat:@"%@('%@','%@','%@','%@')", middle,[tmpItem objectForKey:@"c1"],[tmpItem objectForKey:@"c2"],[tmpItem objectForKey:@"c3"],[tmpItem objectForKey:@"c4"]] ;
}
else {
middle = [NSString stringWithFormat:@"%@('%@','%@','%@','%@') ,", middle,[tmpItem objectForKey:@"c1"],[tmpItem objectForKey:@"c2"],[tmpItem objectForKey:@"c3"],[tmpItem objectForKey:@"c4"]] ;
}
}
query = [NSString stringWithFormat:@"%@%@", query, middle] ;
[db executeUpdate:query];
上面的代码不能在“表”上插入任何数据,但是当我将for循环更改为只运行10次时,数据插入正确,这意味着没有语法错误。
我试错了,数据插入正确,for循环设置为i
然后我搜索http://www.sqlite.org/limits.html,在这个页面上有一个Maximum Depth Of An Expression Tree,应该是我要设置的,但是在使用FMDB的时候如何设置这个属性?
或者我可以插入大量数据的唯一方法就是将它们一个一个插入?
【问题讨论】:
-
阅读FMDB自述文件,注意使用FMDatabaseQueue部分。
-
对不起,我读过这部分。我不在不同的线程中使用 FMDatabase 对象,这只是我对 FMDatabase 对象使用的唯一操作。
标签: objective-c sqlite fmdb