sqlite3_step步没有走完可以使用
sqlite3_finalize(stmt) 结束,否则会卡死数据库
函数
//UTF-8到GB2312的转换
char* U2G(const char* utf8)
{
int len = MultiByteToWideChar(CP_UTF8, 0, utf8, -1, NULL, 0);
wchar_t* wstr = new wchar_t[len + 1];
memset(wstr, 0, len + 1);
MultiByteToWideChar(CP_UTF8, 0, utf8, -1, wstr, len);
len = WideCharToMultiByte(CP_ACP, 0, wstr, -1, NULL, 0, NULL, NULL);
char* str = new char[len + 1];
memset(str, 0, len + 1);
WideCharToMultiByte(CP_ACP, 0, wstr, -1, str, len, NULL, NULL);
if (wstr) delete[] wstr;
return str;
}
//GB2312到UTF-8的转换
char* G2U(const char* gb2312)
{
int len = MultiByteToWideChar(CP_ACP, 0, gb2312, -1, NULL, 0);
wchar_t* wstr = new wchar_t[len + 1];
memset(wstr, 0, len + 1);
MultiByteToWideChar(CP_ACP, 0, gb2312, -1, wstr, len);
len = WideCharToMultiByte(CP_UTF8, 0, wstr, -1, NULL, 0, NULL, NULL);
char* str = new char[len + 1];
memset(str, 0, len + 1);
WideCharToMultiByte(CP_UTF8, 0, wstr, -1, str, len, NULL, NULL);
if (wstr) delete[] wstr;
return str;
}
//封装sqlite3_exec,自动GB2312转UTF8,成功返回空,失败返回错误信息
char* sqlite3_exec_n(sqlite3* db, const char* sql)
{
char* errormsg = NULL;
sqlite3_exec(db, G2U(sql), NULL, NULL, &errormsg);
return errormsg;
}
//封装sqlite3_column_text,自动UTF8转GB2312
char* sqlite3_column_text_n(sqlite3_stmt* a,int row)
{
return U2G((char*)sqlite3_column_text(a, row));
}
//返回匹配到的第一条语句,失败返回NULL
char* sqlite3_find(sqlite3* db, const char* sql, int row)
{
sqlite3_stmt* stmt;
char* re = NULL;
if (sqlite3_prepare_v2(db, G2U(sql), -1, &stmt, NULL) == SQLITE_OK)
{
if (sqlite3_step(stmt) == SQLITE_ROW)
{
re= sqlite3_column_text_n(stmt, row);
sqlite3_finalize(stmt);
}
}
return re;
}