Sqlite Finalize 和 Db 锁定问题

发布于 2025-01-06 11:14:13 字数 1922 浏览 1 评论 0原文

我在我的应用程序中使用以下功能,并且我最近开始使用 sq-lite,我想听听您对我是否正确使用该功能的意见。

由于我在搜索时遇到应用程序中的数据库锁定问题,我发现我需要使用 sqlite3 Finalize 语句。

我不确定的是我是否需要为每个 sqlite3 准备语句放置一个 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;
}

I am using the below function in my app,and i have started using the sq-lite recently and i would like to get your opinion that i am going with that correctly or not.

Since i am facing db locked issue in my app when searched i found that i need to use sqlite3 finalise statement.

what i am not sure is do i need to place one finalise statement for each sqlite3 prepare statement

Please let me know

- ( 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;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

极度宠爱 2025-01-13 11:14:13

你好,你在日志中得到了锁定的问题,这意味着你的数据库是打开并且你在该数据库中做了一些更改,所以关闭数据库并再次尝试运行应用程序并插入表...

希望这会帮助你..

hii you get the locked issues in log right, that means your database is open and you doing some changes in that database so close database and try again to run application and insert in table...

hope this will help you..

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文