Sqlite敲定和Db锁定问题

时间:2012-02-17 06:23:21

标签: iphone sqlite ios4

我在我的应用程序中使用了以下功能,并且我最近开始使用sq-lite,我希望得到你的意见,我是否正确使用它。

由于我在搜索时遇到数据库锁定问题,因此我发现需要使用sqlite3 finalize语句。

我不确定是否需要为每个sqlite3 prepare语句放置一个finalize语句

请告诉我

- ( BOOL ) addNewCate:(NSString*)dbPath:(NSString*)title:(NSString*)tierOneID:(NSString*)tierTwoID{

    BOOL returnVal = NO;

    if (sqlite3_open([dbPath UTF8String], &database) == SQLITE_OK) 
    {
        const char *sql = "insert into storyboard_phrases(phrase) Values(?)";

        sqlite3_stmt *addStmt;

        if(sqlite3_prepare_v2(database, sql, -1, &addStmt, NULL) == SQLITE_OK){

            sqlite3_bind_text(addStmt, 1, [title UTF8String], -1, SQLITE_TRANSIENT);
        }

        if(sqlite3_step(addStmt) != SQLITE_DONE ) {

            NSLog( @"Error: %s", sqlite3_errmsg(database) );

        } else {

            NSLog( @"Insert into row id = %d", sqlite3_last_insert_rowid(database));

            int ph_id = sqlite3_last_insert_rowid(database);

            int sub_category_id = [tierTwoID intValue];

            int main_category_id = [tierOneID intValue];

            addStmt = nil;

            sql = "insert into phrase_reference(phrase_id, sub_category_id,main_category_id) Values(?,?,?)";

            if(sqlite3_prepare_v2(database, sql, -1, &addStmt, NULL) == SQLITE_OK){

                sqlite3_bind_int(addStmt, 1, ph_id);

                sqlite3_bind_int(addStmt, 2, sub_category_id);

                sqlite3_bind_int(addStmt, 3, main_category_id);

            }

            if(sqlite3_step(addStmt) != SQLITE_DONE ) {

                NSLog( @"Error: %s", sqlite3_errmsg(database) );

            } else {

                NSLog( @"Insert into row id = %d", sqlite3_last_insert_rowid(database));
                returnVal = YES;


            }

        }
        sqlite3_finalize(addStmt);

    }
    sqlite3_close(database);

    return returnVal;
}

1 个答案:

答案 0 :(得分:0)

如果您在日志中获得了锁定的问题,这意味着您的数据库打开,并且您在该数据库中进行了一些更改,以便关闭数据库并再次尝试运行应用程序并插入表格......

希望这会对你有帮助..