2012-05-07 70 views
0

iam获取数据库锁定错误。数据库锁定错误

-(IBAction)YesData:(id)sender 
{ 
[self Check_Create_DB]; 

sqlite3 *database; 



if(idimg == 0) 
{ 

NSData *imgData = UIImagePNGRepresentation(image.image); 

UIImage *dataImage=[[UIImage alloc] init]; 

dataImage=[UIImage imageWithData:imgData]; 

    int ycount1=1; 

int ncount1=0; 

int neutcount1=0; 

if(sqlite3_open([dbpath UTF8String],&database)==SQLITE_OK) 

{ 
    NSLog(@"Connection Open"); 

    const char *sqlTmp="insert into 

    images(imgname,ycount,ncount,neutcount)values(?,?,?,?)"; 


    sqlite3_stmt *cmp_sqlstmt; 

    int returnvalue=sqlite3_prepare_v2(database,sqlTmp,-1,&cmp_sqlstmt,NULL); 

    if(returnvalue == SQLITE_OK) 
    {  
     sqlite3_bind_blob(cmp_sqlstmt, 1, [imgData bytes], [imgData length], NULL); 

     sqlite3_bind_int(cmp_sqlstmt, 2, ycount1); 


     sqlite3_bind_int(cmp_sqlstmt, 3, ncount1); 

     sqlite3_bind_int(cmp_sqlstmt, 4, neutcount1); 

     if(SQLITE_DONE != sqlite3_step(cmp_sqlstmt)) 
           NSAssert1(0, @"Error while inserting. '%s'",sqlite3_errmsg(database)); 

     NSLog(@"insert successfully") ;    

    } 
    sqlite3_step(cmp_sqlstmt); 

    sqlite3_finalize(cmp_sqlstmt); 

    sqlite3_close(database); 





    [email protected]"You Voted Yes"; 

    [newView setHidden:NO]; 
    } 
    else 
    { 
     sqlite3_close(database); 
    } 


    } 
    else 
    { 
    // [self Check_Create_DB]; 
    //sqlite3 *database; 

    sqlite3_open([dbpath UTF8String],&database); 

    if(sqlite3_open([dbpath UTF8String],&database)==SQLITE_OK) 
    { 

     NSLog(@"Connection Open"); 

     idycount+=1; 

     const char *sqlTmp="update Images set ycount=? where imgid= ?"; 


     sqlite3_stmt *cmp_sqlstmt; 


     int returnvalue=sqlite3_prepare_v2(database,sqlTmp,-1,&cmp_sqlstmt,NULL); 


     NSLog(@"return value.....%d",returnvalue); 


     if(returnvalue == SQLITE_OK) 

     { 

      sqlite3_bind_int(cmp_sqlstmt,1,idycount); 


      sqlite3_bind_int(cmp_sqlstmt,2,idimg); 


      NSLog(@"updated"); 

      if(SQLITE_DONE != sqlite3_step(cmp_sqlstmt)) 

       NSAssert1(0, @"Error while updating. '%s'", sqlite3_errmsg(database)); 


      sqlite3_reset(cmp_sqlstmt);  


     } 
     else 
     { 

      NSAssert1(0, @"Error while creating update statement. '%s'", sqlite3_errmsg(database)); 


     } 

     sqlite3_step(cmp_sqlstmt); 


     sqlite3_finalize(cmp_sqlstmt); 


     sqlite3_close(database); 



    } 
    else 
    { 

    sqlite3_close(database); 


    } 


    } 
} 
+0

这是错误:'NSInternalInconsistencyException',原因:'更新时出错。 '数据库被锁定'” ***在第一掷调用堆栈: ( \t 0的CoreFoundation 0x00f5b5a9 __exceptionPreprocess + 185 \t 1 libobjc.A.dylib 0x00d8a313 objc_exception_throw + 44 \t 2的CoreFoundation 0x00f13ef8 + [NSException提高:格式:参数:] + 136 –

回答

0

在我看来你还没有正确关闭数据库(sqlite3_close(database))。

对于未来的项目看一看FMDatabase:在您关闭数据库properly.Try重装数据库和表

0

Offtopic这可能发生在你的实现看起来像上面。

FMDatabase is an Objective-C wrapper around SQLite

相关问题