设为首页 加入收藏

TOP

C++使用Sqlite3,使用CppSQLite3的封装(四)
2016-04-27 17:25:21 】 浏览:2634
Tags:使用 Sqlite3 CppSQLite3 封装
pszErrMess = sqlite3_mprintf("%s[%d]: %s", errorCodeAsString(nErrCode), nErrCode, szErrMess szErrMess : ""); if (bDeleteMsg && szErrMess) { sqlite3_free(szErrMess); } } CppSQLite3Exception::CppSQLite3Exception(const CppSQLite3Exception& e) : mnErrCode(e.mnErrCode) { mpszErrMess = 0; if (e.mpszErrMess) { mpszErrMess = sqlite3_mprintf("%s", e.mpszErrMess); } } const char* CppSQLite3Exception::errorCodeAsString(int nErrCode) { switch (nErrCode) { case SQLITE_OK : return "SQLITE_OK"; case SQLITE_ERROR : return "SQLITE_ERROR"; case SQLITE_INTERNAL : return "SQLITE_INTERNAL"; case SQLITE_PERM : return "SQLITE_PERM"; case SQLITE_ABORT : return "SQLITE_ABORT"; case SQLITE_BUSY : return "SQLITE_BUSY"; case SQLITE_LOCKED : return "SQLITE_LOCKED"; case SQLITE_NOMEM : return "SQLITE_NOMEM"; case SQLITE_READONLY : return "SQLITE_READONLY"; case SQLITE_INTERRUPT : return "SQLITE_INTERRUPT"; case SQLITE_IOERR : return "SQLITE_IOERR"; case SQLITE_CORRUPT : return "SQLITE_CORRUPT"; case SQLITE_NOTFOUND : return "SQLITE_NOTFOUND"; case SQLITE_FULL : return "SQLITE_FULL"; case SQLITE_CANTOPEN : return "SQLITE_CANTOPEN"; case SQLITE_PROTOCOL : return "SQLITE_PROTOCOL"; case SQLITE_EMPTY : return "SQLITE_EMPTY"; case SQLITE_SCHEMA : return "SQLITE_SCHEMA"; case SQLITE_TOOBIG : return "SQLITE_TOOBIG"; case SQLITE_CONSTRAINT : return "SQLITE_CONSTRAINT"; case SQLITE_MISMATCH : return "SQLITE_MISMATCH"; case SQLITE_MISUSE : return "SQLITE_MISUSE"; case SQLITE_NOLFS : return "SQLITE_NOLFS"; case SQLITE_AUTH : return "SQLITE_AUTH"; case SQLITE_FORMAT : return "SQLITE_FORMAT"; case SQLITE_RANGE : return "SQLITE_RANGE"; case SQLITE_ROW : return "SQLITE_ROW"; case SQLITE_DONE : return "SQLITE_DONE"; case CPPSQLITE_ERROR : return "CPPSQLITE_ERROR"; default: return "UNKNOWN_ERROR"; } } CppSQLite3Exception::~CppSQLite3Exception() { if (mpszErrMess) { sqlite3_free(mpszErrMess); mpszErrMess = 0; } } //////////////////////////////////////////////////////////////////////////////// CppSQLite3Buffer::CppSQLite3Buffer() { mpBuf = 0; } CppSQLite3Buffer::~CppSQLite3Buffer() { clear(); } void CppSQLite3Buffer::clear() { if (mpBuf) { sqlite3_free(mpBuf); mpBuf = 0; } } const char* CppSQLite3Buffer::format(const char* szFormat, ...) { clear(); va_list va; va_start(va, szFormat); mpBuf = sqlite3_vmprintf(szFormat, va); va_end(va); return mpBuf; } //////////////////////////////////////////////////////////////////////////////// CppSQLite3Binary::CppSQLite3Binary() : mpBuf(0), mnBinaryLen(0), mnBufferLen(0), mnEncodedLen(0), mbEncoded(false) { } CppSQLite3Binary::~CppSQLite3Binary() { clear(); } void CppSQLite3Binary::setBinary(const unsigned char* pBuf, int nLen) { mpBuf = allocBuffer(nLen); memcpy(mpBuf, pBuf, nLen); } void CppSQLite3Binary::setEncoded(const unsigned char* pBuf) { clear(); mnEncodedLen = strlen((const char*)pBuf); mnBufferLen = mnEncodedLen + 1; // Allow for NULL terminator mpBuf = (unsigned char*)malloc(mnBufferLen); if (!mpBuf) { throw CppSQLite3Exception(CPPSQLITE_ERROR, "Cannot allocate memory", DONT_DELETE_MSG); } memcpy(mpBuf, pBuf, mnBufferLen); mbEncoded = true; } const unsigned char* CppSQLite3Binary::getEncoded() { if (!mbEncoded) { unsigned char* ptmp = (unsigned char*)malloc(mnBinaryLen); memcpy(ptmp, mpBuf, mnBinaryLen); mnEncodedLen = sqlite3_encode_binary(ptmp, mnBinaryLen, mpBuf); free(ptmp);
首页 上一页 1 2 3 4 5 6 7 下一页 尾页 4/10/10
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C++11新特性 下一篇c++内存管理

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目