sqlite3解決A table inthe database is locked

昨天寫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 聲 明

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章