私は iOS 開発の初心者で、最近 iOS SQLite で奇妙な動作に直面しています。ユーザーが SQLite DB にレコードを挿入できるようにするアプリケーションがあります。アプリケーションは正常に動作しますが、しばらくすると、ユーザーが作成したレコードが自然に消えます。これが発生すると、その後新しいレコードを作成しようとすると、レコードが DB に保存されません。挿入ステートメントはエラーなしで実行されましたが、データは挿入されません。以下は、レコード挿入ロジックを実行する関数です。助けてください、ありがとう。
+ (BOOL)insertAutoRecord:(AutoRecord *)record{
BOOL ret = NO;
NSString *query = [NSString stringWithFormat:@"insert into %@ (%@, %@, %@, %@, %@, %@, %@) values ('%@', %d, %d, '%@', %d, %d, %d)",
TABLE_NAME_AUTOMATIC_RECORDS,
COL_NAME_AUTO_RECORD_SENSOR_ID,
COL_NAME_AUTO_RECORD_MONITOR_START_DATE,
COL_NAME_AUTO_RECORD_MONITOR_END_DATE,
COL_NAME_AUTO_RECORD_FREE_TEXT,
COL_NAME_AUTO_RECORD_CREATE_DATE,
COL_NAME_AUTO_RECORD_KID_ID,
COL_NAME_AUTO_RECORD_LAST_SYNC_DATE,
record.sensorId,
record.startDate,
record.endDate,
[record.freeText stringByReplacingOccurrencesOfString:@"'" withString:@"''"],
record.createDate,
record.kidId,
0];
KSDelegate *appDelegate = (KSDelegate *)[[UIApplication sharedApplication] delegate];
sqlite3 *dbHandler = appDelegate.dbHandler;
sqlite3_stmt *stmt;
const char *insert_stmt = [query UTF8String];
sqlite3_prepare_v2(dbHandler, insert_stmt, -1, &stmt, NULL);
if (sqlite3_step(stmt) == SQLITE_DONE)
{
ret = YES;
}
else
{
ret = NO;
}
sqlite3_finalize(stmt);
if(ret == NO)
return NO;
query = [NSString stringWithFormat:@"select last_insert_rowid()"];
if(sqlite3_prepare(dbHandler, [query UTF8String], -1, &stmt, nil) != SQLITE_OK)
return NO;
if(sqlite3_step(stmt) == SQLITE_ROW)
{
int recordId = (int)sqlite3_column_int(stmt, 0);
record.recordId = recordId;
}
else
ret = NO;
sqlite3_finalize(stmt);
return ret;
}