2012-10-31 38 views
1

我使用的SQLite数据库店面我data.But它显示的“数据库被锁定”,而嵌件query.Here是我的代码数据库被锁定在错误的sqlite

sqlite3_stmt *statement; 
     NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
     const char *dbpath = [[defaults objectForKey:@"dbpath"] UTF8String]; 

     if (sqlite3_open(dbpath, &studentDB22) == SQLITE_OK) 
     { 
      NSString *insertSQL = [NSString stringWithFormat:@"INSERT INTO Emotion_videos (name) VALUES (\"%@\")",filePath]; 
      const char *query_stmt = [insertSQL UTF8String]; 
       if (sqlite3_prepare_v2(studentDB22, query_stmt, -1, &statement, NULL) == SQLITE_OK) 
       { 
        NSLog(@"shi h2345"); 
        if (sqlite3_step(statement) == SQLITE_ROW) 
        { 
         printf("could not prepare statement: %s\n", sqlite3_errmsg(studentDB22)); 

        } 

       } 
      sqlite3_finalize(statement); 
     } 
     else 
     { 
        printf("could not prepare statement: %s\n", sqlite3_errmsg(studentDB22)); 
     } 

我能够插入错误数据两次或三次,但当它再次运行时,它会显示数据库锁定错误。

回答

2

您打开数据库,但不关闭它。

您不应该使用字符串格式来创建查询。你应该放?查询中的占位符然后绑定正确的值。这会照顾正确引用和转义字符串值等内容。

NSString *insertSQL = @"INSERT INTO Emotion_videos (name) VALUES (?)"; 

后您准备的声明,呼吁sqlite3_bind_text字符串值绑定。

另外。请勿使用sqlite3_open,请使用sqlite3_open_v2。这更好,并给你更多的控制。

+0

OK让我看看。 – shivam

+0

sqlite3_open_v2中的参数是什么? – shivam

+0

请参阅http://sqlite.com/c3ref/open.html – rmaddy

0

你已经错过了重要的一步之一,而创建数据库连接: - 如果它已经使创建连接之前

关闭数据库连接。在函数结束

if (sqlite3_open([[self dataFilePath] UTF8String], &database) 
    != SQLITE_OK) { sqlite3_close(database); NSAssert(0, @"Failed to open database"); 
    } 

用途: -

sqlite3_close(database);