00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00028 #ifndef _CppSQLite3_H_
00029 #define _CppSQLite3_H_
00030
00031 #include "sqlite3.h"
00032 #include <cstdio>
00033 #include <cstring>
00034
00035 #define CPPSQLITE_ERROR 1000
00036
00037 class CppSQLite3Exception
00038 {
00039 public:
00040
00041 CppSQLite3Exception(const int nErrCode,
00042 char* szErrMess,
00043 bool bDeleteMsg=true);
00044
00045 CppSQLite3Exception(const CppSQLite3Exception& e);
00046
00047 virtual ~CppSQLite3Exception();
00048
00049 const int errorCode() { return mnErrCode; }
00050
00051 const char* errorMessage() { return mpszErrMess; }
00052
00053 static const char* errorCodeAsString(int nErrCode);
00054
00055 private:
00056
00057 int mnErrCode;
00058 char* mpszErrMess;
00059 };
00060
00061
00062 class CppSQLite3Buffer
00063 {
00064 public:
00065
00066 CppSQLite3Buffer();
00067
00068 ~CppSQLite3Buffer();
00069
00070 const char* format(const char* szFormat, ...);
00071
00072 operator const char*() { return mpBuf; }
00073
00074 void clear();
00075
00076 private:
00077
00078 char* mpBuf;
00079 };
00080
00081
00082 class CppSQLite3Binary
00083 {
00084 public:
00085
00086 CppSQLite3Binary();
00087
00088 ~CppSQLite3Binary();
00089
00090 void setBinary(const unsigned char* pBuf, int nLen);
00091 void setEncoded(const unsigned char* pBuf);
00092
00093 const unsigned char* getEncoded();
00094 const unsigned char* getBinary();
00095
00096 int getBinaryLength();
00097
00098 unsigned char* allocBuffer(int nLen);
00099
00100 void clear();
00101
00102 private:
00103
00104 unsigned char* mpBuf;
00105 int mnBinaryLen;
00106 int mnBufferLen;
00107 int mnEncodedLen;
00108 bool mbEncoded;
00109 };
00110
00111
00112 class CppSQLite3Query
00113 {
00114 public:
00115
00116 CppSQLite3Query();
00117
00118 CppSQLite3Query(const CppSQLite3Query& rQuery);
00119
00120 CppSQLite3Query(sqlite3* pDB,
00121 sqlite3_stmt* pVM,
00122 bool bEof,
00123 bool bOwnVM=true);
00124
00125 CppSQLite3Query& operator=(const CppSQLite3Query& rQuery);
00126
00127 virtual ~CppSQLite3Query();
00128
00129 int numFields();
00130
00131 int fieldIndex(const char* szField);
00132 const char* fieldName(int nCol);
00133
00134 const char* fieldDeclType(int nCol);
00135 int fieldDataType(int nCol);
00136
00137 const char* fieldValue(int nField);
00138 const char* fieldValue(const char* szField);
00139
00140 int getIntField(int nField, int nNullValue=0);
00141 int getIntField(const char* szField, int nNullValue=0);
00142
00143 double getFloatField(int nField, double fNullValue=0.0);
00144 double getFloatField(const char* szField, double fNullValue=0.0);
00145
00146 const char* getStringField(int nField, const char* szNullValue="");
00147 const char* getStringField(const char* szField, const char* szNullValue="");
00148
00149 const unsigned char* getBlobField(int nField, int& nLen);
00150 const unsigned char* getBlobField(const char* szField, int& nLen);
00151
00152 bool fieldIsNull(int nField);
00153 bool fieldIsNull(const char* szField);
00154
00155 bool eof();
00156
00157 void nextRow();
00158
00159 void finalize();
00160
00161 private:
00162
00163 void checkVM();
00164
00165 sqlite3* mpDB;
00166 sqlite3_stmt* mpVM;
00167 bool mbEof;
00168 int mnCols;
00169 bool mbOwnVM;
00170 };
00171
00172
00173 class CppSQLite3Table
00174 {
00175 public:
00176
00177 CppSQLite3Table();
00178
00179 CppSQLite3Table(const CppSQLite3Table& rTable);
00180
00181 CppSQLite3Table(char** paszResults, int nRows, int nCols);
00182
00183 virtual ~CppSQLite3Table();
00184
00185 CppSQLite3Table& operator=(const CppSQLite3Table& rTable);
00186
00187 int numFields();
00188
00189 int numRows();
00190
00191 const char* fieldName(int nCol);
00192
00193 const char* fieldValue(int nField);
00194 const char* fieldValue(const char* szField);
00195
00196 int getIntField(int nField, int nNullValue=0);
00197 int getIntField(const char* szField, int nNullValue=0);
00198
00199 double getFloatField(int nField, double fNullValue=0.0);
00200 double getFloatField(const char* szField, double fNullValue=0.0);
00201
00202 const char* getStringField(int nField, const char* szNullValue="");
00203 const char* getStringField(const char* szField, const char* szNullValue="");
00204
00205 bool fieldIsNull(int nField);
00206 bool fieldIsNull(const char* szField);
00207
00208 void setRow(int nRow);
00209
00210 void finalize();
00211
00212 private:
00213
00214 void checkResults();
00215
00216 int mnCols;
00217 int mnRows;
00218 int mnCurrentRow;
00219 char** mpaszResults;
00220 };
00221
00222
00223 class CppSQLite3Statement
00224 {
00225 public:
00226
00227 CppSQLite3Statement();
00228
00229 CppSQLite3Statement(const CppSQLite3Statement& rStatement);
00230
00231 CppSQLite3Statement(sqlite3* pDB, sqlite3_stmt* pVM);
00232
00233 virtual ~CppSQLite3Statement();
00234
00235 CppSQLite3Statement& operator=(const CppSQLite3Statement& rStatement);
00236
00237 int execDML();
00238
00239 CppSQLite3Query execQuery();
00240
00241 void bind(int nParam, const char* szValue);
00242 void bind(int nParam, const int nValue);
00243 void bind(int nParam, const double dwValue);
00244 void bind(int nParam, const unsigned char* blobValue, int nLen);
00245 void bindNull(int nParam);
00246
00247 void reset();
00248
00249 void finalize();
00250
00251 private:
00252
00253 void checkDB();
00254 void checkVM();
00255
00256 sqlite3* mpDB;
00257 sqlite3_stmt* mpVM;
00258 };
00259
00260
00261 class CppSQLite3DB
00262 {
00263 public:
00264
00265 CppSQLite3DB();
00266
00267 virtual ~CppSQLite3DB();
00268
00269 void open(const char* szFile);
00270
00271 void close();
00272
00273 bool tableExists(const char* szTable);
00274
00275 int execDML(const char* szSQL);
00276
00277 CppSQLite3Query execQuery(const char* szSQL);
00278
00279 int execScalar(const char* szSQL);
00280
00281 CppSQLite3Table getTable(const char* szSQL);
00282
00283 CppSQLite3Statement compileStatement(const char* szSQL);
00284
00285 sqlite_int64 lastRowId();
00286
00287 void interrupt() { sqlite3_interrupt(mpDB); }
00288
00289 void setBusyTimeout(int nMillisecs);
00290
00291 static const char* SQLiteVersion() { return SQLITE_VERSION; }
00292
00293 private:
00294
00295 CppSQLite3DB(const CppSQLite3DB& db);
00296 CppSQLite3DB& operator=(const CppSQLite3DB& db);
00297
00298 sqlite3_stmt* compile(const char* szSQL);
00299
00300 void checkDB();
00301
00302 sqlite3* mpDB;
00303 int mnBusyTimeoutMs;
00304 };
00305
00306 #endif