Я использую 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‹500, при настройке i‹501 данные не вставляются.
Затем я ищу http://www.sqlite.org/limits.html , есть < strong>Maximum Depth Of An Expression Tree на этой странице, и это должно быть то, что я хочу установить, но как я могу установить это свойство при использовании FMDB?
Или единственный способ, которым я могу вставить большой объем данных, - это просто вставить их один за другим?