Iphone iOS中的SQLite行为异常

Iphone iOS中的SQLite行为异常,iphone,ios,sqlite,Iphone,Ios,Sqlite,我是iOS开发新手,最近在iOS SQLite上遇到了一些奇怪的行为。我有一个允许用户将记录插入SQLite数据库的应用程序。应用程序工作正常,但过了一段时间,用户创建的记录不知何故自行消失。当这种情况发生时,随后当我尝试创建新记录时,它不会将记录存储在DB中。insert语句执行时没有错误,但数据不是insert。下面是执行记录插入逻辑的函数。请帮忙,谢谢 + (BOOL)insertAutoRecord:(AutoRecord *)record{ BOOL ret = NO; NS

我是iOS开发新手,最近在iOS SQLite上遇到了一些奇怪的行为。我有一个允许用户将记录插入SQLite数据库的应用程序。应用程序工作正常,但过了一段时间,用户创建的记录不知何故自行消失。当这种情况发生时,随后当我尝试创建新记录时,它不会将记录存储在DB中。insert语句执行时没有错误,但数据不是insert。下面是执行记录插入逻辑的函数。请帮忙,谢谢

+ (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;
}

这里是SQlite的完美示例和示例代码。我建议您仔细阅读


愚蠢的问题,但您是否将数据库复制到Documents文件夹并打开该文件夹?在上面的代码中,当我使用[FMDB]()Objective C包装器将我与sqlite3调用隔离开来时,我将遵从其他人的要求。亲爱的Robert,KSDelegate类将在应用程序启动时在Document文件夹中创建数据库。它将检查该表是否不存在,然后我将创建该表。应用程序允许用户创建其他表记录,但不允许创建上面代码中提到的记录。这是在我的一个头文件中定义的数据库路径#在didFinishLaunchingWithOptions方法下的KSDelegate类中定义数据库路径[[NSHomeDirectory()stringByAppendingPathComponent:@“Documents”]stringByAppendingPathComponent:@“local_db.sqlite”],它将打开并初始化数据库sqlite3_open([DATABASE_PATH UTF8String],&dbHandler);[自初始化数据库];//如果这个initDatabase不存在,它将创建这个表。好的,我只是想知道在你构建应用程序时,你的数据库是否正在被擦除。当我听到你建议你看到记录存在,然后它神奇地消失了,它只是闻起来数据库不知怎么地被抹掉了。这是我唯一想到的想法。亲爱的罗伯特,我也没有明确说明。当我刚开始使用应用程序时,一切正常,然后可能在几个小时或几天后再次启动应用程序,在常量表\u NAME\u AUTOMATIC\u RECORDS中定义的指定表中的记录消失。之后,当我调用insertAutoRecord方法时,它会正常运行,但数据不会插入到数据库中。这就是它让我困惑的地方。有什么建议吗?