Вы тратите впустую память
NSString *p = [[[NSString alloc]init] autorelease];
NSString *p2 = [[[NSString alloc]init] autorelease]
....
p = aBedInstance.bedno;
p2 = aEntryIDInstance.bedID;
Нет необходимости создавать новый экземпляр, когда все, что вы делаете, это проверяете значение aBedInstance.bedno
.p2
вообще не используется где-либо еще в блоке
Удалите первые две строки и замените следующее в вашем for
цикле
for (... ) {
NSString *p = [aBedInstance.bedno retain]; // thread safety
NSString *p2 = [aEntryIDInstance.bedID retain]; // FIXME: p2 is not used in the scope of this method
if (....) {
....
}
....
[p release];
[p2 release];
}
Есть другие проблемы с кодом.
if(sqlite3_prepare_v2(database, sqlStmt, -1, &cmp_sqlStmt, NULL) == SQLITE_OK) {
int returnValue = sqlite3_prepare_v2(database, sqlStmt, -1, &cmp_sqlStmt, NULL);
((returnValue ==SQLITE_OK)? NSLog(@"INSERT into USAGEDATA SUCCESS") : NSLog(@"INSERT into USAGEDATA Fail"));
sqlite3_step(cmp_sqlStmt);
}
sqlite3_finalize(cmp_sqlStmt);
sqlite3_close(database);
if(sqlite3_prepare_v2(database, sqlStmt1, -1, &cmp_sqlStmt1, NULL) == SQLITE_OK) {
int returnValue = sqlite3_prepare_v2(database, sqlStmt, -1, &cmp_sqlStmt1, NULL);
((returnValue ==SQLITE_OK) ? NSLog(@"INSERT into XMLEntryID SUCCESS") : NSLog(@"INSERT into XMLEntryID Fail"));
sqlite3_step(cmp_sqlStmt1);
}
sqlite3_finalize(cmp_sqlStmt1);
sqlite3_close(database);
Вы должны звонить подготовить только один раз для каждого утверждения.Вызов функции sqlite3 для sqlStmt1
завершится ошибкой, поскольку вы уже закрыли базу данных.
if (SQLITE_OK != sqlite3_prepare_v2(database, sqlStmt, -1, &cmp_sqlStmt, NULL)) {
NSLog(@"Prepare INSERT into USAGEDATA FAILED");
} else {
if (SQLITE_DONE != sqlite3_step(cmp_sqlStmt)) {
NSLog(@"INSERT into USAGEDATA FAILED");
} else {
NSLog(@"INSERT into USAGEDATA SUCCEEDED");
}
sqlite3_finalize(cmp_sqlStmt);
}
if (SQLITE_OK != sqlite3_prepare_v2(database, sqlStmt, -1, &cmp_sqlStmt1, NULL)) {
NSLog(@"Prepare INSERT into XMLEntryID FAILED");
} else {
if (SQLITE_DONE != sqlite3_step(cmp_sqlStmt1)) {
NSLog(@"INSERT into XMLEntryID FAILED");
} else {
NSLog(@"INSERT into XMLEntryID SUCCEEDED");
}
sqlite3_finalize(cmp_sqlStmt1);
}
sqlite3_close(database);
Обратите внимание, что вы можете улучшить общую производительность этого с помощью статических строк SQL, которые используют параметры, подготовьте операторы внеиз цикла for, затем используйте sqlite3_bind_*
процедуры для установки значений внутри цикла for.
Из документации sqlite
Жизнь объекта оператора выглядит примерно так:
- Создание объекта с помощью sqlite3_prepare_v2 () или связанной функции.
- Привязка значений к параметрам хоста с использованием интерфейсов sqlite3_bind _ * ().
- Запуск SQLвызывая sqlite3_step () один или несколько раз.
- Сбросьте инструкцию с помощью sqlite3_reset (), затем вернитесь к шагу 2. Сделайте это ноль или более раз.
- Уничтожьте объект с помощью sqlite3_finalize ().