Чтение:
1.Для запросов важно повторно использовать скомпилированные операторы.
2. Убедитесь, что вы используете параметры, чтобы вы могли повторно использовать эти скомпилированные запросы
Когда вы вызываете sqlite3_prepare_v2, он компилирует оператор идает вам ссылку на утверждение обратно.Найдите способ сохранить это и использовать снова.Смотрите код ниже для * заявления.Вы передаете & заявление в подготовку.
Кроме того, обратите внимание на использование?для параметров.Если вы собираетесь повторно использовать оператор, важно вызвать sqlite3_reset () снова для оператора, повторно связать входные данные из программы (параметры) и выполнить его снова.
sqlite3_stmt *statement;
NSString *querySQL = @"update contacts set name=?,address=?,phone=? where id=?";
NSLog(@"query: %@", querySQL);
const char *query_stmt = [querySQL UTF8String];
// preparing a query compiles the query so it can be re-used.
// find a way to save off the *statement so you can re-use it.
sqlite3_prepare_v2(_contactDb, query_stmt, -1, &statement, NULL);
// use sqlite3_bind_xxx functions to bind in order values to the params
sqlite3_bind_text(statement, 1, [[contact name] UTF8String], -1, SQLITE_STATIC);
sqlite3_bind_text(statement, 2, [[contact address] UTF8String], -1, SQLITE_STATIC);
sqlite3_bind_text(statement, 3, [[contact phone] UTF8String], -1, SQLITE_STATIC);
sqlite3_bind_int64(statement, 4, [[contact id] longLongValue]);
Всегдапроверьте коды возврата!и зарегистрируйте или обработайте ошибки.
rc = sqlite3_step(stmt);
switch (rc)
{
case SQLITE_ROW:
// ...
break;
case SQLITE_OK:
case SQLITE_DONE:
break;
default:
// ....
}
return NO;
}
если вы получили ошибку, войдите в систему или получите сообщение об ошибке, чтобы предоставить дополнительную информацию:
- (NSString*)errorMessage
{
return [NSString stringWithCString:sqlite3_errmsg(_sqlite3) encoding:NSUTF8StringEncoding];
}