sqlite3解决A table inthe database is locked

    xiaoxiao2025-02-10  13

    昨天写sqlite3数据库插入函数,总是只能插入一条数据,第二次数据插入不了,得到的报错信息是rc = 6,A table inthe database is locked

    因为我在插入之前调用了sqlite3_prepare(),被操作的表被SQL 语句编译后的字节码绑定,所以我想应该使用函数sqlite3_finalize()释放分配给字节码的内存空间

     

    sqlite3_finalize

    函数原型:

    int sqlite3_finalize(sqlite3_stmt* pStmt);

    函数功能: 销毁一个 SQL 声明,释放内存。

    输入参数:pStmt,待销毁的 SQL 声明;

    输出参数:无

    返回值:执行成功返回SQLITE_OK,否则返回其他值

     

    sqlite3_prepare接口把一条 SQL 语句编译成字节码留给后面的执行函数。

    任何时候如果调用 sqlite3_finalize() 将销毁一个准备好的 SQL 声明.在数据库

    关闭之前,所有准备好的声明都必须被释放销毁。sqlite3_reset() 函数用来重置

    一个 SQL 声明的状态,使得它可以被再次执行。

    intread_user_name(sqlite3 *db,char **errmsg,char *name)  //check online id ,compare id have no same

    {

           int rc;

          

           sqlite3_stmt *stmt = NULL;

           rc = sqlite3_prepare(db,"select *from user",-1,&stmt,0);

           is_ok(rc,errmsg);

           rc = sqlite3_step(stmt);

           while(rc == SQLITE_ROW)

           {

             if(0 == strcmp(name,sqlite3_column_text(stmt,1)))

             {

                         sqlite3_finalize( stmt );

                         return USERIN;

             }      

             rc = sqlite3_step(stmt);

           }

          

           sqlite3_finalize( stmt );

           return USEROUT;

    }

    在函数调用结束前加上sqlite3_finalize( stmt )释放 S Q L 声 明

     

    转载请注明原文地址: https://ju.6miu.com/read-1296283.html
    最新回复(0)