Я пытаюсь вставить все элементы из NSArray (tpInfo) и вставить их в базу данных SQLite.Но заполняются только первые 15 строк, а это 240 записей.tpInfo содержит более 3000 элементов.Я застрял здесь на некоторое время и был бы признателен за правильное направление.
Я попытался изменить цикл for, чтобы увеличить 'i' на 1, который вводит больше данных, но он вставляется в неправильные столбцы / строки и генерирует исключение NSRangeException.
'NSRangeException',причина: '*** - [__ NSArrayM objectAtIndexedSubscript:]: индекс 2304 за пределами [0 .. 2303]'
-(void) insertTP: (NSMutableArray * ) tpInfo {
NSString * databasePath = [self dataPath: @ "eldb.sqlite3"];
sqlite3 * database;
if (sqlite3_open([databasePath UTF8String], & database) != SQLITE_OK) {
NSLog(@ "Could not open database");
return;
} else {
NSLog(@ "Inserting TimeProfile Data");
}
//for each element in the array, save the array index
sqlite3_stmt * statement;
NSString * SQLInsert = @ "INSERT INTO TIME_PROFILES (TIMEZONE_IID,
TIMEZONE_ID, SERIAL, FROM_TIME, TO_TIME ,MONDAY, TUESDAY, WEDNESDAY,
THURSDAY, FRIDAY, SATURDAY, SUNDAY, HOLIDAY, SPECIAL_DAY_ONE,
SPECIAL_DAY_TWO, TIMEZONE_ITEM_ID) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?,
?, ?, ?, ?, ?, ?);";
if (sqlite3_prepare_v2(database, [SQLInsert UTF8String], -1, & statement,
nil) == SQLITE_OK) {
NSLog(@ "pinfo %@", tpInfo);
for (int i = 0; i < [tpInfo count]; i += 16) {
sqlite3_bind_text(statement, 1, [tpInfo[i] UTF8String], -1, NULL);
sqlite3_bind_text(statement, 2, [tpInfo[i + 1] UTF8String], -1, NULL);
sqlite3_bind_text(statement, 3, [tpInfo[i + 2] UTF8String], -1, NULL);
sqlite3_bind_text(statement, 4, [tpInfo[i + 3] UTF8String], -1, NULL);
sqlite3_bind_text(statement, 5, [tpInfo[i + 4] UTF8String], -1, NULL);
sqlite3_bind_text(statement, 6, [tpInfo[i + 5] UTF8String], -1, NULL);
sqlite3_bind_text(statement, 7, [tpInfo[i + 6] UTF8String], -1, NULL);
sqlite3_bind_text(statement, 8, [tpInfo[i + 7] UTF8String], -1, NULL);
sqlite3_bind_text(statement, 9, [tpInfo[i + 8] UTF8String], -1, NULL);
sqlite3_bind_text(statement, 10, [tpInfo[i + 9] UTF8String], -1, NULL);
sqlite3_bind_text(statement, 11, [tpInfo[i + 10] UTF8String], -1, NULL);
sqlite3_bind_text(statement, 12, [tpInfo[i + 11] UTF8String], -1, NULL);
sqlite3_bind_text(statement, 13, [tpInfo[i + 12] UTF8String], -1, NULL);
sqlite3_bind_text(statement, 14, [tpInfo[i + 13] UTF8String], -1, NULL);
sqlite3_bind_text(statement, 15, [tpInfo[i + 14] UTF8String], -1, NULL);
sqlite3_bind_text(statement, 16, [tpInfo[i + 15] UTF8String], -1, NULL);
if (sqlite3_step(statement) != SQLITE_DONE) {
NSLog(@"Database returned error %d: %s", sqlite3_errcode(database), sqlite3_errmsg(database));
}
sqlite3_reset(statement);
}
sqlite3_finalize(statement);
} else {
NSLog(@ "Can't prepare: %s", sqlite3_errmsg(database));
}
sqlite3_close(database);
}