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