int CppSQLite3Statement::execDML() { checkDB(); checkVM(); int nRet = sqlite3_step(mpVM); if (nRet == SQLITE_DONE) { int nRowsChanged = sqlite3_changes(mpDB); nRet = sqlite3_reset(mpVM); if (nRet != SQLITE_OK) { LPCTSTR szError = (LPCTSTR) _sqlite3_errmsg(mpDB); throw CppSQLite3Exception(nRet, (LPTSTR)szError, DONT_DELETE_MSG); } return nRowsChanged; } else { nRet = sqlite3_reset(mpVM); LPCTSTR szError = (LPCTSTR) _sqlite3_errmsg(mpDB); throw CppSQLite3Exception(nRet, (LPTSTR)szError, DONT_DELETE_MSG); } }
void CppSQLite3DB::open(LPCTSTR szFile) { int nRet; #ifndef IN_MEMORY_DB #if defined(_UNICODE) || defined(UNICODE) nRet = sqlite3_open16(szFile, &mpDB); // not tested under window 98 #else // For Ansi Version //*************- Added by Begemot szFile must be in unicode- 23/03/06 11:04 - **** OSVERSIONINFOEX osvi; ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX)); osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); GetVersionEx ((OSVERSIONINFO *) &osvi); if ( osvi.dwMajorVersion == 5) { WCHAR pMultiByteStr[MAX_PATH+1]; MultiByteToWideChar( CP_ACP, 0, szFile, _tcslen(szFile)+1, pMultiByteStr, sizeof(pMultiByteStr)/sizeof(pMultiByteStr[0]) ); nRet = sqlite3_open16(pMultiByteStr, &mpDB); } else nRet = sqlite3_open(szFile,&mpDB); #endif //************************* if (nRet != SQLITE_OK) { LPCTSTR szError = (LPCTSTR) _sqlite3_errmsg(mpDB); throw CppSQLite3Exception(nRet, (LPTSTR)szError, DONT_DELETE_MSG); } #else nRet = sqlite3_open16(":memory:", &mpDB); if (nRet != SQLITE_OK) { LPCTSTR szError = (LPCTSTR) _sqlite3_errmsg(mpDB); throw CppSQLite3Exception(nRet, (LPTSTR)szError, DONT_DELETE_MSG); } // Attach the backup to the in memory nRet = sqlite3_exec(mpDB, "ATTACH DATABASE 'H:\\Users\\tomy\\AppData\\Roaming\\Benubird\\Benubird.db' as Benubird", NULL, NULL, NULL); if (nRet != SQLITE_OK) { LPCTSTR szError = (LPCTSTR) _sqlite3_errmsg(mpDB); throw CppSQLite3Exception(nRet, (LPTSTR)szError, DONT_DELETE_MSG); } #endif setBusyTimeout(mnBusyTimeoutMs); //int lsave = sqlite3_threadsafe(); }
CppSQLite3Query CppSQLite3DB::execQuery(LPCTSTR szSQL) { checkDB(); int nRet; sqlite3_stmt* pVM; do{ pVM = compile(szSQL); nRet = _sqlite3_step(pVM); if (nRet == SQLITE_DONE) { // no rows return CppSQLite3Query(mpDB, pVM, true/*eof*/); } else if (nRet == SQLITE_ROW) { // at least 1 row return CppSQLite3Query(mpDB, pVM, false/*eof*/); } nRet = _sqlite3_finalize(pVM); } while( nRet == SQLITE_SCHEMA ); // Edit By Begemot 08/16/06 12:44:35 - read SQLite FAQ LPCTSTR szError = (LPCTSTR) _sqlite3_errmsg(mpDB); throw CppSQLite3Exception(nRet, (LPTSTR)szError, DONT_DELETE_MSG); }
int CppSQLite3DB::execDML(LPCTSTR szSQL) { int nRet; sqlite3_stmt* pVM; checkDB(); //int nReturn; do{ pVM = compile(szSQL); nRet = _sqlite3_step(pVM); //nReturn = nRet; if (nRet == SQLITE_ERROR) { LPCTSTR szError = (LPCTSTR) _sqlite3_errmsg(mpDB); throw CppSQLite3Exception(nRet, (LPTSTR)szError, DONT_DELETE_MSG); } nRet = _sqlite3_finalize(pVM); } while( nRet == SQLITE_SCHEMA ); return nRet; //return nReturn; }
void CppSQLite3DB::open(LPCTSTR szFile) { int nRet; #if defined(_UNICODE) || defined(UNICODE) nRet = sqlite3_open16(szFile, &mpDB); // not tested under window 98 #else // For Ansi Version //*************- Added by Begemot szFile must be in unicode- 23/03/06 11:04 - **** OSVERSIONINFOEX osvi; ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX)); osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); GetVersionEx ((OSVERSIONINFO *) &osvi); if ( osvi.dwMajorVersion == 5) { WCHAR pMultiByteStr[MAX_PATH+1]; MultiByteToWideChar( CP_ACP, 0, szFile, _tcslen(szFile)+1, pMultiByteStr, sizeof(pMultiByteStr)/sizeof(pMultiByteStr[0]) ); nRet = sqlite3_open16(pMultiByteStr, &mpDB); } else nRet = sqlite3_open(szFile,&mpDB); #endif //************************* if (nRet != SQLITE_OK) { LPCTSTR szError = (LPCTSTR) _sqlite3_errmsg(mpDB); throw CppSQLite3Exception(nRet, (LPTSTR)szError, DONT_DELETE_MSG); } setBusyTimeout(mnBusyTimeoutMs); }
void CppSQLite3Query::finalize() { if (mpVM && mbOwnVM) { int nRet = _sqlite3_finalize(mpVM); mpVM = 0; if (nRet != SQLITE_OK) { LPCTSTR szError = (LPCTSTR)_sqlite3_errmsg(mpDB); throw CppSQLite3Exception(nRet, (LPTSTR)szError, DONT_DELETE_MSG); } } }
void CppSQLite3Statement::reset() { if (mpVM) { int nRet = sqlite3_reset(mpVM); if (nRet != SQLITE_OK) { LPCTSTR szError = (LPCTSTR) _sqlite3_errmsg(mpDB); throw CppSQLite3Exception(nRet, (LPTSTR)szError, DONT_DELETE_MSG); } } }
sqlite3_stmt* CppSQLite3DB::compile(LPCTSTR szSQL) { checkDB(); sqlite3_stmt* pVM; int nRet = _sqlite3_prepare(mpDB, szSQL, -1, &pVM, NULL); if (nRet != SQLITE_OK) { pVM=NULL; LPCTSTR szError = (LPCTSTR) _sqlite3_errmsg(mpDB); throw CppSQLite3Exception(nRet, (LPTSTR)szError, DONT_DELETE_MSG); } return pVM; }
void CppSQLite3DB::close() { if (mpDB) { int nRet = _sqlite3_close(mpDB); if (nRet != SQLITE_OK) { LPCTSTR szError = (LPCTSTR)_sqlite3_errmsg(mpDB); throw CppSQLite3Exception(nRet, (LPTSTR)szError, DONT_DELETE_MSG); } mpDB = 0; } }
void CppSQLite3DB::close() { if (mpDB) { #ifndef IN_MEMORY_DB // sqlite3_exec(mpDB, "DETACH DATABASE backup", NULL, NULL, NULL); #endif int nRet = _sqlite3_close(mpDB); if (nRet != SQLITE_OK) { LPCTSTR szError = (LPCTSTR)_sqlite3_errmsg(mpDB); throw CppSQLite3Exception(nRet, (LPTSTR)szError, DONT_DELETE_MSG); } mpDB = 0; } }
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; LPCTSTR szError = (LPCTSTR)_sqlite3_errmsg(mpDB); throw CppSQLite3Exception(nRet, (LPTSTR)szError, DONT_DELETE_MSG); } }
LPCTSTR CDbSQLite::LastError() { m_szText = (LPCTSTR)_sqlite3_errmsg(m_db); return m_szText; }