昨天写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 声 明