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
45 CppSQLite3Exception(const CppSQLite3Exception& e);
\r
47 virtual ~CppSQLite3Exception();
\r
49 const int errorCode() { return mnErrCode; }
\r
51 const char* errorMessage() { return mpszErrMess; }
\r
53 static const char* errorCodeAsString(int nErrCode);
\r
62 class CppSQLite3Buffer
\r
68 ~CppSQLite3Buffer();
\r
70 const char* format(const char* szFormat, ...);
\r
72 operator const char*() { return mpBuf; }
\r
82 class CppSQLite3Binary
\r
88 ~CppSQLite3Binary();
\r
90 void setBinary(const unsigned char* pBuf, int nLen);
\r
91 void setEncoded(const unsigned char* pBuf);
\r
93 const unsigned char* getEncoded();
\r
94 const unsigned char* getBinary();
\r
96 int getBinaryLength();
\r
98 unsigned char* allocBuffer(int nLen);
\r
104 unsigned char* mpBuf;
\r
112 class CppSQLite3Query
\r
118 CppSQLite3Query(const CppSQLite3Query& rQuery);
\r
120 CppSQLite3Query(sqlite3* pDB,
\r
125 CppSQLite3Query& operator=(const CppSQLite3Query& rQuery);
\r
127 virtual ~CppSQLite3Query();
\r
131 int fieldIndex(const char* szField);
\r
132 const char* fieldName(int nCol);
\r
134 const char* fieldDeclType(int nCol);
\r
135 int fieldDataType(int nCol);
\r
137 const char* fieldValue(int nField);
\r
138 const char* fieldValue(const char* szField);
\r
140 int getIntField(int nField, int nNullValue=0);
\r
141 int getIntField(const char* szField, int nNullValue=0);
\r
143 double getFloatField(int nField, double fNullValue=0.0);
\r
144 double getFloatField(const char* szField, double fNullValue=0.0);
\r
146 const char* getStringField(int nField, const char* szNullValue="");
\r
147 const char* getStringField(const char* szField, const char* szNullValue="");
\r
149 const unsigned char* getBlobField(int nField, int& nLen);
\r
150 const unsigned char* getBlobField(const char* szField, int& nLen);
\r
152 bool fieldIsNull(int nField);
\r
153 bool fieldIsNull(const char* szField);
\r
166 sqlite3_stmt* mpVM;
\r
173 class CppSQLite3Table
\r
179 CppSQLite3Table(const CppSQLite3Table& rTable);
\r
181 CppSQLite3Table(char** paszResults, int nRows, int nCols);
\r
183 virtual ~CppSQLite3Table();
\r
185 CppSQLite3Table& operator=(const CppSQLite3Table& rTable);
\r
191 const char* fieldName(int nCol);
\r
193 const char* fieldValue(int nField);
\r
194 const char* fieldValue(const char* szField);
\r
196 int getIntField(int nField, int nNullValue=0);
\r
197 int getIntField(const char* szField, int nNullValue=0);
\r
199 double getFloatField(int nField, double fNullValue=0.0);
\r
200 double getFloatField(const char* szField, double fNullValue=0.0);
\r
202 const char* getStringField(int nField, const char* szNullValue="");
\r
203 const char* getStringField(const char* szField, const char* szNullValue="");
\r
205 bool fieldIsNull(int nField);
\r
206 bool fieldIsNull(const char* szField);
\r
208 void setRow(int nRow);
\r
214 void checkResults();
\r
219 char** mpaszResults;
\r
223 class CppSQLite3Statement
\r
227 CppSQLite3Statement();
\r
229 CppSQLite3Statement(const CppSQLite3Statement& rStatement);
\r
231 CppSQLite3Statement(sqlite3* pDB, sqlite3_stmt* pVM);
\r
233 virtual ~CppSQLite3Statement();
\r
235 CppSQLite3Statement& operator=(const CppSQLite3Statement& rStatement);
\r
239 CppSQLite3Query execQuery();
\r
241 void bind(int nParam, const char* szValue);
\r
242 void bind(int nParam, const int nValue);
\r
243 void bind(int nParam, const double dwValue);
\r
244 void bind(int nParam, const unsigned char* blobValue, int nLen);
\r
245 void bindNull(int nParam);
\r
257 sqlite3_stmt* mpVM;
\r
267 virtual ~CppSQLite3DB();
\r
269 void open(const char* szFile);
\r
273 bool tableExists(const char* szTable);
\r
275 int execDML(const char* szSQL);
\r
277 CppSQLite3Query execQuery(const char* szSQL);
\r
279 int execScalar(const char* szSQL);
\r
281 CppSQLite3Table getTable(const char* szSQL);
\r
283 CppSQLite3Statement compileStatement(const char* szSQL);
\r
285 sqlite_int64 lastRowId();
\r
287 void interrupt() { sqlite3_interrupt(mpDB); }
\r
289 void setBusyTimeout(int nMillisecs);
\r
291 static const char* SQLiteVersion() { return SQLITE_VERSION; }
\r
295 CppSQLite3DB(const CppSQLite3DB& db);
\r
296 CppSQLite3DB& operator=(const CppSQLite3DB& db);
\r
298 sqlite3_stmt* compile(const char* szSQL);
\r
303 int mnBusyTimeoutMs;
\r