数据库已锁定错误sqlite Ios

问题描述:

我正在使用sqlite项目。在我的项目中,我正在插入,获取和更新数据到datbase.But有时我是数据库的geeting错误被锁定,并且没有这样的表:tablename。我检查了我的代码sqlite3_open,sqlite3_prepare_v2,sqlite3_step,sqlite3_finalize和sqlite3_close。但我得到Problem.Can任何人都可以帮助我数据库已锁定错误sqlite Ios

当您尝试从同一数据库连接同时与数据库执行两个不兼容的事情时,会出现此错误代码。例如,如果您处于SELECT语句的中间,并且您尝试删除SELECT所读取的其中一个表,您将收到SQLITE_LOCKED错误。下面是(使用的Tcl)的示例:

db eval {SELECT rowid FROM ex1} { 
    if {$rowid==10} { 
    db eval {DROP TABLE ex1} ;# will give SQLITE_LOCKED error 
    } 
} 

注意,一个SQLITE_LOCKED错误是从SQLITE_BUSY不同(5)。 SQLITE_BUSY意味着另一个数据库连接(可能在另一个进程中)以阻止您使用数据库的方式使用数据库。 SQLITE_LOCKED意味着争用的来源是内部的,并且来自收到SQLITE_LOCKED错误的同一数据库连接。

这里有其他原因得到一个SQLITE_LOCKED错误:

  1. 试图创建或删除表或索引,而SELECT语句是 仍悬而未决。

    • 有时人们认为他们已经使用SELECT语句 因为sqlite3_step()返回SQLITE_DONE完成。但是,在sqlite3_reset()或sqlite3_finalize()调用 之前,SELECT是 并不真正完成。

    • 从签入[3902](2007-05-02 V3.3.17之后)开始,现在允许使用CREATE语句 。

  2. 试图写入一个表而SELECT是在该相同 表活性。

    • 从签入[3355](2006-08-16版本3.3.7之后)开始,现在允许使用 。
  3. 试图做两SELECT在同一个表在同一时间在
    多线程应用程序,如果SQLite是没有设置这样做。

  4. 的fcntl(3,在DB文件F_SETLK调用失败,这可能是由
    NFS锁定问题引起的,例如,对于这个问题的一个解决方案,就是 MV的DB走,并把它复制回来,它有一个新的inode
    值。

+0

你有problem.All参考的任何解决方案都欢迎。 – chakshu