运行后,SQLite3“数据库被锁定”

时间:2011-07-11 07:02:22

标签: iphone database sqlite

在我的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);在一些地方工作,但它没有:(

我的问题:

  • 打开应用
  • 做事
  • App将内容备份到DB
  • App向服务器发送内容,然后从DB中删除。
  • 这样可行,但是如果我杀了应用程序并再次调试,数据库现在已被锁定。
  • 应用程序可以读取db的内容,但写入被锁定。
  • 唯一的解决方案是从模拟器中删除应用并重新安装。

任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

确保您的 SQLite浏览器没有执行任何SQLite查询。就此而言,您应该在运行应用程序时关闭SQLite浏览器,以确保这是可能的原因。几天前我遇到了同样的问题并做了同样的事情。幸运的是我摆脱了这个问题。