在我的iPhone应用程序中,我想要从SQLite3备份/恢复/删除一些数据,但我遇到了一个恼人的问题。
如果我干净地构建应用程序,它将成功获取我的数据,将其放入数据库,然后在需要时删除(数据库用于在发送到服务器之前备份数据,然后在传输完成后删除)。
但是,在第一轮之后(我按下主页按钮,再次进行构建/调试),数据库因某种原因被锁定了?我正在使用sqlite_exec来执行INSERT和DELETE查询,因此人为错误应该是最小的吗?
下面是我使用的代码(是的,我知道sql stmt很难看):
//SAVING
-(void)gemRegIDb:(Registrering *)reg
{
//SAVE REGISTRATION TO DB
sqlite3 *db = [[FotoDokAppDelegate shared] database];
char *err;
NSString *sql = [NSString stringWithFormat:@"INSERT INTO Registrering (regId, imagePath, name, date, sentCount, status,igang, latStr, lngStr, brugerID, projektID, felter, harGPS, tempBilledeNavn) Values('%@','%@','%@','%@','%i','%@','%i','%@','%@','%@','%@','%@','%i','%@');",reg.regId,reg.imagePath,reg.name,reg.date,reg.sentCount,reg.status,reg.igang,reg.latStr,reg.lngStr,reg.brugerID,reg.projektID,reg.felter,reg.harGPS,reg.tempBilledeNavn];
if(sqlite3_exec(db, [sql UTF8String], NULL, NULL, &err) != SQLITE_OK)
{
NSLog(@"Noget gik galt i GEM REGISTRERING TIL DB.");
}
}
//DELETING:
-(void)sletRegFraDb:(Registrering *)reg
{
//DELETE REGISTRATION FORM DB
sqlite3 *db = [[FotoDokAppDelegate shared] database];
char *err;
NSString *sql = [NSString stringWithFormat:@"DELETE FROM Registrering WHERE regId ='%@'",reg.regId];
if(sqlite3_exec(db, [sql UTF8String], NULL, NULL, &err) != SQLITE_OK)
{
NSLog(@"Noget gik galt i SLET REGISTRERING TIL DB.");
}
}
第二次运行后,err变量=“数据库被锁定”。
编辑:我认为删除出口(0);并插入一些sqlite3_close(db);在一些地方工作,但它没有:(我的问题:
任何人都可以帮助我吗?
答案 0 :(得分:1)
确保您的 SQLite浏览器没有执行任何SQLite查询。就此而言,您应该在运行应用程序时关闭SQLite浏览器,以确保这是可能的原因。几天前我遇到了同样的问题并做了同样的事情。幸运的是我摆脱了这个问题。