描述
返回描述错误的英文文本,如UTF-8。
C / C ++语法
const void *sqlite3_errmsg16(sqlite3*); |
PB语法
FUNCTION sqlite3_errmsg16 ( _ BYVAL hDbc AS DWORD _ ) AS DWORD |
参数
pDb
[in]数据库连接句柄。必须是从sqlite3_open,sqlite3_open16或sqlite3_open_v2获取的NULL指针或sqlite3对象指针。
返回值
指向UTF-16字符串的指针,用于描述英语中的错误。
备注
用于保存错误消息字符串的内存在内部进行管理。应用程序不需要担心释放结果。但是,错误字符串可能会被其他SQLite函数的后续调用覆盖或解除分配。
当使用串行线程模式时,可能是在第一个错误的时间和对这些函数的调用之间的另一个线程上发生第二个错误。发生这种情况时,会报告第二个错误,因为这些功能总是报告最近的结果。为了避免这种情况,在所有调用这里列出的函数之后,每个线程可以在开始使用D之前调用sqlite3_mutex_enter(sqlite3_db_mutex(D))并调用sqlite3_mutex_leave(sqlite3_db_mutex(D))来获得数据库连接D的独占使用。已经完成
如果一个函数与SQLITE_MISUSE失败,那意味着应用程序调用的函数不正确。在这种情况下,错误代码和消息可能被设置或可能不被设置。
C ++实现代码
#ifndef SQLITE_OMIT_UTF16
/*
** Return UTF-16 encoded English language explanation of the most recent
** error.
*/
SQLITE_API const void *sqlite3_errmsg16(sqlite3 *db){
static const u16 outOfMem[] = {
'o', 'u', 't', ' ', 'o', 'f', ' ', 'm', 'e', 'm', 'o', 'r', 'y', 0
};
static const u16 misuse[] = {
'l', 'i', 'b', 'r', 'a', 'r', 'y', ' ',
'r', 'o', 'u', 't', 'i', 'n', 'e', ' ',
'c', 'a', 'l', 'l', 'e', 'd', ' ',
'o', 'u', 't', ' ',
'o', 'f', ' ',
's', 'e', 'q', 'u', 'e', 'n', 'c', 'e', 0
};
const void *z;
if( !db ){
return (void *)outOfMem;
}
if( !sqlite3SafetyCheckSickOrOk(db) ){
return (void *)misuse;
}
sqlite3_mutex_enter(db->mutex);
if( db->mallocFailed ){
z = (void *)outOfMem;
}else{
z = sqlite3_value_text16(db->pErr);
if( z==0 ){
sqlite3ValueSetStr(db->pErr, -1, sqlite3ErrStr(db->errCode),
SQLITE_UTF8, SQLITE_STATIC);
z = sqlite3_value_text16(db->pErr);
}
/* A malloc() may have failed within the call to sqlite3_value_text16()
** above. If this is the case, then the db->mallocFailed flag needs to
** be cleared before returning. Do this directly, instead of via
** sqlite3ApiExit(), to avoid setting the database handle error message.
*/
db->mallocFailed = 0;
}
sqlite3_mutex_leave(db->mutex);
return z;
}
#endif /* SQLITE_OMIT_UTF16 */