iPhone中的Sqlite3提供了数据库锁定异常

iPhone中的Sqlite3提供了数据库锁定异常,iphone,sqlite,Iphone,Sqlite,我是iphone和sqlite的新手,正在做一些教程 我创建了一个方法,将一些临时信息存储到我的数据库中 现在,当我在应用程序的firstView控制器上时,我调用了该方法两次。它将数据存储到特定表中两次。现在我转到SecondViewController,在那里,头文件中有一个新的sqlite3对象,我再次将该方法复制粘贴到SecondViewController中。现在,当我在第二个ViewController上调用该方法时,会出现以下错误: Terminating app due to

我是iphone和sqlite的新手,正在做一些教程

我创建了一个方法,将一些临时信息存储到我的数据库中

现在,当我在应用程序的firstView控制器上时,我调用了该方法两次。它将数据存储到特定表中两次。现在我转到SecondViewController,在那里,头文件中有一个新的sqlite3对象,我再次将该方法复制粘贴到SecondViewController中。现在,当我在第二个ViewController上调用该方法时,会出现以下错误:

 Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Error while inserting data. 'database is locked''    
我的代码是:

-(void)storeTemp
{

朋友们,请帮帮我。我真的累坏了

非常感谢

here lots of chances to kill 
1.if your id is not null in DB it will kill with constraint failed error

if you don't want to insert any value to id remove from list 
like
const char *sql = "insert into groups( groupid, name, desc , createdon,createdby) Values(?,?,?,?,?)";
把数字改成1-5而不是2-6


将数字1-5改为2-6,我在if/else(不确定为什么)之后遇到了一些问题,但是当我将finalize和close调用放在if中时,就会解决。我开始使用相同的NSLog(编号以便我知道哪个是哪个)跟踪每个打开和关闭然后,您可以看到哪个步骤使数据库保持打开(并因此锁定)

我在if/else之后的sqlite3\u close中遇到了一些问题(不知道为什么),但当我也将finalize和close调用放在if中时,就可以解决了。我开始使用相同的NSLog(编号以便我知道哪个是哪个)跟踪每次打开和关闭然后,您可以看到哪个步骤使数据库保持打开(并因此锁定)

您是否已将数据库复制到可写文档目录

您的prepare通话需要稍作更改:

if(sqlite3\u prepare\u v2(数据库,sql,-1,&add,NULL)==SQLITE\u OK){

if(sqlite3\u prepare\u v2(数据库,[sqlutf8string],-1,&add,NULL)==SQLITE\u OK){


(但这不是数据库被锁定的原因。

是否已将数据库复制到可写文档目录

您的prepare通话需要稍作更改:

if(sqlite3\u prepare\u v2(数据库,sql,-1,&add,NULL)==SQLITE\u OK){

if(sqlite3\u prepare\u v2(数据库,[sqlutf8string],-1,&add,NULL)==SQLITE\u OK){


(但这不是数据库被锁定的原因。

id是主键和自动递增值。这就是我不添加其值的原因。我尝试从insert查询中删除id,但仍然出现错误..:(你是否将2-6的数字改为1-5,然后用断点调试一次告诉我哪个语句应用程序killit实际执行所有sqlite_bind_文本语句,但当它在sqlite_步骤中执行时,它没有给sqlite_完成,所以它进入内部if并显示断言错误表。除了我粘贴在问题中的情况,该死的thas是我的m。)istake….我忘记关闭我的一个方法上的DB..当我遵循与我的DB交互的每个方法时,我发现..谢谢你的建议:)id是主键和自动递增值。这就是为什么我不添加它的值。我尝试从insert查询中删除id,但仍然发生错误..:(你是否将2-6的数字改为1-5,然后用断点调试一次告诉我哪个语句应用程序killit实际执行所有sqlite_bind_文本语句,但当它在sqlite_步骤中执行时,它没有给sqlite_完成,所以它进入内部if并显示断言错误表。除了我粘贴在问题中的情况,该死的thas是我的m。)我忘记关闭我的一个方法上的数据库当我遵循每一个与我的数据库交互的方法时,我发现…谢谢你的建议。:)该死的那是我的错误…我忘记关闭我的一个方法上的数据库。。当我遵循每一个与我的数据库交互的方法时,我发现了。。谢谢你的建议。:)该死的thas是我的错误…我忘记关闭我的一个方法上的DB…当我遵循与我的DB交互的每个方法时,我发现..谢谢你的建议。:)
here lots of chances to kill 
1.if your id is not null in DB it will kill with constraint failed error

if you don't want to insert any value to id remove from list 
like
const char *sql = "insert into groups( groupid, name, desc , createdon,createdby) Values(?,?,?,?,?)";