设为首页 加入收藏

TOP

C++使用Sqlite3,使用CppSQLite3的封装(七)
2016-04-27 17:25:21 】 浏览:2629
Tags:使用 Sqlite3 CppSQLite3 封装
) { try { finalize(); } catch (...) { } } CppSQLite3Table& CppSQLite3Table::operator=(const CppSQLite3Table& rTable) { try { finalize(); } catch (...) { } mpaszResults = rTable.mpaszResults; // Only one object can own the results const_cast (rTable).mpaszResults = 0; mnRows = rTable.mnRows; mnCols = rTable.mnCols; mnCurrentRow = rTable.mnCurrentRow; return *this; } void CppSQLite3Table::finalize() { if (mpaszResults) { sqlite3_free_table(mpaszResults); mpaszResults = 0; } } int CppSQLite3Table::numFields() { checkResults(); return mnCols; } int CppSQLite3Table::numRows() { checkResults(); return mnRows; } const char* CppSQLite3Table::fieldValue(int nField) { checkResults(); if (nField < 0 || nField > mnCols-1) { throw CppSQLite3Exception(CPPSQLITE_ERROR, "Invalid field index requested", DONT_DELETE_MSG); } int nIndex = (mnCurrentRow*mnCols) + mnCols + nField; return mpaszResults[nIndex]; } const char* CppSQLite3Table::fieldValue(const char* szField) { checkResults(); if (szField) { for (int nField = 0; nField < mnCols; nField++) { if (strcmp(szField, mpaszResults[nField]) == 0) { int nIndex = (mnCurrentRow*mnCols) + mnCols + nField; return mpaszResults[nIndex]; } } } throw CppSQLite3Exception(CPPSQLITE_ERROR, "Invalid field name requested", DONT_DELETE_MSG); } int CppSQLite3Table::getIntField(int nField, int nNullValue/*=0*/) { if (fieldIsNull(nField)) { return nNullValue; } else { return atoi(fieldValue(nField)); } } int CppSQLite3Table::getIntField(const char* szField, int nNullValue/*=0*/) { if (fieldIsNull(szField)) { return nNullValue; } else { return atoi(fieldValue(szField)); } } double CppSQLite3Table::getFloatField(int nField, double fNullValue/*=0.0*/) { if (fieldIsNull(nField)) { return fNullValue; } else { return atof(fieldValue(nField)); } } double CppSQLite3Table::getFloatField(const char* szField, double fNullValue/*=0.0*/) { if (fieldIsNull(szField)) { return fNullValue; } else { return atof(fieldValue(szField)); } } const char* CppSQLite3Table::getStringField(int nField, const char* szNullValue/*=""*/) { if (fieldIsNull(nField)) { return szNullValue; } else { return fieldValue(nField); } } const char* CppSQLite3Table::getStringField(const char* szField, const char* szNullValue/*=""*/) { if (fieldIsNull(szField)) { return szNullValue; } else { return fieldValue(szField); } } bool CppSQLite3Table::fieldIsNull(int nField) { checkResults(); return (fieldValue(nField) == 0); } bool CppSQLite3Table::fieldIsNull(const char* szField) { checkResults(); return (fieldValue(szField) == 0); } const char* CppSQLite3Table::fieldName(int nCol) { checkResults(); if (nCol < 0 || nCol > mnCols-1) { throw CppSQLite3Exception(CPPSQLITE_ERROR, "Invalid field index requested", DONT_DELETE_MSG); } return mpaszResults[nCol]; } void CppSQLite3Table::setRow(int nRow) { checkResults(); if (nRow < 0 || nRow > mnRows-1) { throw CppSQLite3Exception(CPPSQLITE_ERROR, "Invalid row index requested", DONT_DELETE_MSG); } mnCurrentRow = nRow; } void CppSQLite3Table::checkResults() { if (mpaszResults == 0) { throw CppSQLite3Exception(CPPSQLITE_ERROR, "Null Results pointer", DONT_DELETE_MSG); } } //////////////////////////////////////////////////////////////////////////////// CppSQLite3Statement::CppSQLite3Statement() { mpDB = 0; mpVM = 0; } CppSQLite3Statement::CppSQLite3Statement(const CppSQLite3Statement& rStatement) { mpDB = rStatement.mpDB; mpVM = rStatement.mpVM; // Only one object can own VM const_cast (rStatement).mpVM = 0; } CppSQLite3Statement::CppSQLite3Statement(sqlite3* pDB, sqlite3_stmt* pVM) { mpDB = pDB; mpVM = pVM; } CppSQLite3Statement::~CppSQLite3Statement() { try { finalize(); } catch (...) { } } CppSQLite3Statement& CppSQLite3Statement::operator=(const CppSQLite3Statement& rStatement) { mpDB = rStatement.mpDB; mpVM = rStatement.mpVM; // Only one object can own VM const_cast (rStatement).mpVM = 0; return *this; } int CppSQLite3Statement::execDML() { checkDB(); checkVM(); const char* szError=0; int nRet = sqlite3_step(mpVM); if (nRet == SQLITE_DONE) { int nRowsChanged = sqlite3_changes(mpDB); nRet = sqlite3_reset(mpVM); if (nRet != SQLITE_OK) { szError = sqlite3_errmsg(mpDB); throw CppSQLite3Exception(nRet, (char*)szError, DONT_DELETE_MSG); } return nRowsChanged; } else { nRet = sqlite3_reset(mpVM); szError = sqlite3_errmsg(mpDB); throw CppSQLite3Exception(nRet, (char*)szError, DONT_DELETE_MSG); } } CppSQLite3Query CppSQLite3Statement::execQuery() { checkDB(); checkVM(); int nRet = sqlite3_step(mpVM); if (nRet == SQLITE_DONE) { // no rows return CppSQLite3Query(mpDB, mpVM, true/*eof*/, false); } else if (nRet == SQLITE_ROW) { // at least 1 row return CppSQLite3Query(mpDB, mpVM, false/*eof*/, false); } else { nRet = sqlite3_reset(mpVM); const char* szError = sqlite3_errmsg(mpDB); throw CppSQLite3Exception(nRet, (char*)szError, DONT_DELETE_MSG); } } void CppSQLite3Statement::bind(int nParam, const char* szValue) { checkVM(); int nRes = sqlite3_bind_text(mpVM, nParam, szValue, -1, SQLITE_TRANSIENT); if (nRes != SQLITE_OK) { thr
首页 上一页 4 5 6 7 8 9 10 下一页 尾页 7/10/10
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C++11新特性 下一篇c++内存管理

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目