1 ////////////////////////////////////////////////////////////////////////////////
\r
2 // CppSQLite3 - A C++ wrapper around the SQLite3 embedded database library.
\r
4 // Copyright (c) 2004 Rob Groves. All Rights Reserved. rob.groves@btinternet.com
\r
6 // Permission to use, copy, modify, and distribute this software and its
\r
7 // documentation for any purpose, without fee, and without a written
\r
8 // agreement, is hereby granted, provided that the above copyright notice,
\r
9 // this paragraph and the following two paragraphs appear in all copies,
\r
10 // modifications, and distributions.
\r
12 // IN NO EVENT SHALL THE AUTHOR BE LIABLE TO ANY PARTY FOR DIRECT,
\r
13 // INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST
\r
14 // PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION,
\r
15 // EVEN IF THE AUTHOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
\r
17 // THE AUTHOR SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT
\r
18 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
\r
19 // PARTICULAR PURPOSE. THE SOFTWARE AND ACCOMPANYING DOCUMENTATION, IF
\r
20 // ANY, PROVIDED HEREUNDER IS PROVIDED "AS IS". THE AUTHOR HAS NO OBLIGATION
\r
21 // TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
\r
23 // V3.0 03/08/2004 -Initial Version for sqlite3
\r
25 // V3.1 16/09/2004 -Implemented getXXXXField using sqlite3 functions
\r
26 // -Added CppSQLiteDB3::tableExists()
\r
27 ////////////////////////////////////////////////////////////////////////////////
\r
28 #ifndef _CppSQLite3_H_
\r
29 #define _CppSQLite3_H_
\r
31 #include "sqlite3.h"
\r
35 #define CPPSQLITE_ERROR 1000
\r
37 class CppSQLite3Exception
\r
41 CppSQLite3Exception(const int nErrCode,
\r
43 bool bDeleteMsg=true);
\r
44 CppSQLite3Exception(const int nErrCode,
\r
45 const char* szErrMess,
\r
46 bool bDeleteMsg=true);
\r
48 CppSQLite3Exception(const CppSQLite3Exception& e);
\r
50 virtual ~CppSQLite3Exception();
\r
52 const int errorCode() { return mnErrCode; }
\r
54 const char* errorMessage() { return mpszErrMess; }
\r
56 static const char* errorCodeAsString(int nErrCode);
\r
65 class CppSQLite3Buffer
\r
71 ~CppSQLite3Buffer();
\r
73 const char* format(const char* szFormat, ...);
\r
75 operator const char*() { return mpBuf; }
\r
85 class CppSQLite3Binary
\r
91 ~CppSQLite3Binary();
\r
93 void setBinary(const unsigned char* pBuf, int nLen);
\r
94 void setEncoded(const unsigned char* pBuf);
\r
96 const unsigned char* getEncoded();
\r
97 const unsigned char* getBinary();
\r
99 int getBinaryLength();
\r
101 unsigned char* allocBuffer(int nLen);
\r
107 unsigned char* mpBuf;
\r
115 class CppSQLite3Query
\r
121 CppSQLite3Query(const CppSQLite3Query& rQuery);
\r
123 CppSQLite3Query(sqlite3* pDB,
\r
128 CppSQLite3Query& operator=(const CppSQLite3Query& rQuery);
\r
130 virtual ~CppSQLite3Query();
\r
134 int fieldIndex(const char* szField);
\r
135 const char* fieldName(int nCol);
\r
137 const char* fieldDeclType(int nCol);
\r
138 int fieldDataType(int nCol);
\r
140 const char* fieldValue(int nField);
\r
141 const char* fieldValue(const char* szField);
\r
143 int getIntField(int nField, int nNullValue=0);
\r
144 int getIntField(const char* szField, int nNullValue=0);
\r
146 double getFloatField(int nField, double fNullValue=0.0);
\r
147 double getFloatField(const char* szField, double fNullValue=0.0);
\r
149 const char* getStringField(int nField, const char* szNullValue="");
\r
150 const char* getStringField(const char* szField, const char* szNullValue="");
\r
152 const unsigned char* getBlobField(int nField, int& nLen);
\r
153 const unsigned char* getBlobField(const char* szField, int& nLen);
\r
155 bool fieldIsNull(int nField);
\r
156 bool fieldIsNull(const char* szField);
\r
169 sqlite3_stmt* mpVM;
\r
176 class CppSQLite3Table
\r
182 CppSQLite3Table(const CppSQLite3Table& rTable);
\r
184 CppSQLite3Table(char** paszResults, int nRows, int nCols);
\r
186 virtual ~CppSQLite3Table();
\r
188 CppSQLite3Table& operator=(const CppSQLite3Table& rTable);
\r
194 const char* fieldName(int nCol);
\r
196 const char* fieldValue(int nField);
\r
197 const char* fieldValue(const char* szField);
\r
199 int getIntField(int nField, int nNullValue=0);
\r
200 int getIntField(const char* szField, int nNullValue=0);
\r
202 double getFloatField(int nField, double fNullValue=0.0);
\r
203 double getFloatField(const char* szField, double fNullValue=0.0);
\r
205 const char* getStringField(int nField, const char* szNullValue="");
\r
206 const char* getStringField(const char* szField, const char* szNullValue="");
\r
208 bool fieldIsNull(int nField);
\r
209 bool fieldIsNull(const char* szField);
\r
211 void setRow(int nRow);
\r
217 void checkResults();
\r
222 char** mpaszResults;
\r
226 class CppSQLite3Statement
\r
230 CppSQLite3Statement();
\r
232 CppSQLite3Statement(const CppSQLite3Statement& rStatement);
\r
234 CppSQLite3Statement(sqlite3* pDB, sqlite3_stmt* pVM);
\r
236 virtual ~CppSQLite3Statement();
\r
238 CppSQLite3Statement& operator=(const CppSQLite3Statement& rStatement);
\r
242 CppSQLite3Query execQuery();
\r
244 void bind(int nParam, const char* szValue);
\r
245 void bind(int nParam, const int nValue);
\r
246 void bind(int nParam, const double dwValue);
\r
247 void bind(int nParam, const unsigned char* blobValue, int nLen);
\r
248 void bindNull(int nParam);
\r
260 sqlite3_stmt* mpVM;
\r
270 virtual ~CppSQLite3DB();
\r
272 void open(const char* szFile);
\r
276 bool tableExists(const char* szTable);
\r
278 int execDML(const char* szSQL);
\r
280 CppSQLite3Query execQuery(const char* szSQL);
\r
282 int execScalar(const char* szSQL);
\r
284 CppSQLite3Table getTable(const char* szSQL);
\r
286 CppSQLite3Statement compileStatement(const char* szSQL);
\r
288 sqlite_int64 lastRowId();
\r
290 void interrupt() { sqlite3_interrupt(mpDB); }
\r
292 void setBusyTimeout(int nMillisecs);
\r
294 static const char* SQLiteVersion() { return SQLITE_VERSION; }
\r
298 CppSQLite3DB(const CppSQLite3DB& db);
\r
299 CppSQLite3DB& operator=(const CppSQLite3DB& db);
\r
301 sqlite3_stmt* compile(const char* szSQL);
\r
306 int mnBusyTimeoutMs;
\r