设为首页 加入收藏

TOP

C++使用Sqlite3,使用CppSQLite3的封装(六)
2016-04-27 17:25:21 】 浏览:2628
Tags:使用 Sqlite3 CppSQLite3 封装
zField, double fNullValue/*=0.0*/) { int nField = fieldIndex(szField); return getFloatField(nField, fNullValue); } const char* CppSQLite3Query::getStringField(int nField, const char* szNullValue/*=""*/) { if (fieldDataType(nField) == SQLITE_NULL) { return szNullValue; } else { return (const char*)sqlite3_column_text(mpVM, nField); } } const char* CppSQLite3Query::getStringField(const char* szField, const char* szNullValue/*=""*/) { int nField = fieldIndex(szField); return getStringField(nField, szNullValue); } const unsigned char* CppSQLite3Query::getBlobField(int nField, int& nLen) { checkVM(); if (nField < 0 || nField > mnCols-1) { throw CppSQLite3Exception(CPPSQLITE_ERROR, "Invalid field index requested", DONT_DELETE_MSG); } nLen = sqlite3_column_bytes(mpVM, nField); return (const unsigned char*)sqlite3_column_blob(mpVM, nField); } const unsigned char* CppSQLite3Query::getBlobField(const char* szField, int& nLen) { int nField = fieldIndex(szField); return getBlobField(nField, nLen); } bool CppSQLite3Query::fieldIsNull(int nField) { return (fieldDataType(nField) == SQLITE_NULL); } bool CppSQLite3Query::fieldIsNull(const char* szField) { int nField = fieldIndex(szField); return (fieldDataType(nField) == SQLITE_NULL); } int CppSQLite3Query::fieldIndex(const char* szField) { checkVM(); if (szField) { for (int nField = 0; nField < mnCols; nField++) { const char* szTemp = sqlite3_column_name(mpVM, nField); if (strcmp(szField, szTemp) == 0) { return nField; } } } throw CppSQLite3Exception(CPPSQLITE_ERROR, "Invalid field name requested", DONT_DELETE_MSG); } const char* CppSQLite3Query::fieldName(int nCol) { checkVM(); if (nCol < 0 || nCol > mnCols-1) { throw CppSQLite3Exception(CPPSQLITE_ERROR, "Invalid field index requested", DONT_DELETE_MSG); } return sqlite3_column_name(mpVM, nCol); } const char* CppSQLite3Query::fieldDeclType(int nCol) { checkVM(); if (nCol < 0 || nCol > mnCols-1) { throw CppSQLite3Exception(CPPSQLITE_ERROR, "Invalid field index requested", DONT_DELETE_MSG); } return sqlite3_column_decltype(mpVM, nCol); } int CppSQLite3Query::fieldDataType(int nCol) { checkVM(); if (nCol < 0 || nCol > mnCols-1) { throw CppSQLite3Exception(CPPSQLITE_ERROR, "Invalid field index requested", DONT_DELETE_MSG); } return sqlite3_column_type(mpVM, nCol); } bool CppSQLite3Query::eof() { checkVM(); return mbEof; } void CppSQLite3Query::nextRow() { checkVM(); int nRet = sqlite3_step(mpVM); if (nRet == SQLITE_DONE) { // no rows mbEof = true; } else if (nRet == SQLITE_ROW) { // more rows, nothing to do } else { nRet = sqlite3_finalize(mpVM); mpVM = 0; const char* szError = sqlite3_errmsg(mpDB); throw CppSQLite3Exception(nRet, (char*)szError, DONT_DELETE_MSG); } } void CppSQLite3Query::finalize() { if (mpVM && mbOwnVM) { int nRet = sqlite3_finalize(mpVM); mpVM = 0; if (nRet != SQLITE_OK) { const char* szError = sqlite3_errmsg(mpDB); throw CppSQLite3Exception(nRet, (char*)szError, DONT_DELETE_MSG); } } } void CppSQLite3Query::checkVM() { if (mpVM == 0) { throw CppSQLite3Exception(CPPSQLITE_ERROR, "Null Virtual Machine pointer", DONT_DELETE_MSG); } } //////////////////////////////////////////////////////////////////////////////// CppSQLite3Table::CppSQLite3Table() { mpaszResults = 0; mnRows = 0; mnCols = 0; mnCurrentRow = 0; } CppSQLite3Table::CppSQLite3Table(const CppSQLite3Table& rTable) { mpaszResults = rTable.mpaszResults; // Only one object can own the results const_cast (rTable).mpaszResults = 0; mnRows = rTable.mnRows; mnCols = rTable.mnCols; mnCurrentRow = rTable.mnCurrentRow; } CppSQLite3Table::CppSQLite3Table(char** paszResults, int nRows, int nCols) { mpaszResults = paszResults; mnRows = nRows; mnCols = nCols; mnCurrentRow = 0; } CppSQLite3Table::~CppSQLite3Table(
首页 上一页 3 4 5 6 7 8 9 下一页 尾页 6/10/10
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C++11新特性 下一篇c++内存管理

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目