creaImageIO_lib
CppSQLite3.h
Go to the documentation of this file.
1 
2 
3 // CppSQLite3 - A C++ wrapper around the SQLite3 embedded database library.
4 
5 //
6 
7 // Copyright (c) 2004 Rob Groves. All Rights Reserved. rob.groves@btinternet.com
8 
9 //
10 
11 // Permission to use, copy, modify, and distribute this software and its
12 
13 // documentation for any purpose, without fee, and without a written
14 
15 // agreement, is hereby granted, provided that the above copyright notice,
16 
17 // this paragraph and the following two paragraphs appear in all copies,
18 
19 // modifications, and distributions.
20 
21 //
22 
23 // IN NO EVENT SHALL THE AUTHOR BE LIABLE TO ANY PARTY FOR DIRECT,
24 
25 // INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST
26 
27 // PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION,
28 
29 // EVEN IF THE AUTHOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 
31 //
32 
33 // THE AUTHOR SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT
34 
35 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
36 
37 // PARTICULAR PURPOSE. THE SOFTWARE AND ACCOMPANYING DOCUMENTATION, IF
38 
39 // ANY, PROVIDED HEREUNDER IS PROVIDED "AS IS". THE AUTHOR HAS NO OBLIGATION
40 
41 // TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
42 
43 //
44 
45 // V3.0 03/08/2004 -Initial Version for sqlite3
46 
47 //
48 
49 // V3.1 16/09/2004 -Implemented getXXXXField using sqlite3 functions
50 
51 // -Added CppSQLiteDB3::tableExists()
52 
54 
55 #ifndef _CppSQLite3_H_
56 
57 #define _CppSQLite3_H_
58 
59 
60 
61 #include "sqlite3.h"
62 
63 #include <cstdio>
64 
65 #include <cstring>
66 
67 
68 
69 #define CPPSQLITE_ERROR 1000
70 
71 
72 
74 
75 {
76 
77 public:
78 
79 
80 
81  CppSQLite3Exception(const int nErrCode,
82 
83  char* szErrMess,
84 
85  bool bDeleteMsg=true);
86 
87  CppSQLite3Exception(const int nErrCode,
88 
89  const char* szErrMess,
90 
91  bool bDeleteMsg=true);
92 
93 
94 
96 
97 
98 
99  virtual ~CppSQLite3Exception();
100 
101 
102 
103  const int errorCode() { return mnErrCode; }
104 
105 
106 
107  const char* errorMessage() { return mpszErrMess; }
108 
109 
110 
111  static const char* errorCodeAsString(int nErrCode);
112 
113 
114 
115 private:
116 
117 
118 
120 
121  char* mpszErrMess;
122 
123 };
124 
125 
126 
127 
128 
130 
131 {
132 
133 public:
134 
135 
136 
138 
139 
140 
142 
143 
144 
145  const char* format(const char* szFormat, ...);
146 
147 
148 
149  operator const char*() { return mpBuf; }
150 
151 
152 
153  void clear();
154 
155 
156 
157 private:
158 
159 
160 
161  char* mpBuf;
162 
163 };
164 
165 
166 
167 
168 
170 
171 {
172 
173 public:
174 
175 
176 
178 
179 
180 
182 
183 
184 
185  void setBinary(const unsigned char* pBuf, int nLen);
186 
187  void setEncoded(const unsigned char* pBuf);
188 
189 
190 
191  const unsigned char* getEncoded();
192 
193  const unsigned char* getBinary();
194 
195 
196 
197  int getBinaryLength();
198 
199 
200 
201  unsigned char* allocBuffer(int nLen);
202 
203 
204 
205  void clear();
206 
207 
208 
209 private:
210 
211 
212 
213  unsigned char* mpBuf;
214 
216 
218 
220 
221  bool mbEncoded;
222 
223 };
224 
225 
226 
227 
228 
230 
231 {
232 
233 public:
234 
235 
236 
237  CppSQLite3Query();
238 
239 
240 
241  CppSQLite3Query(const CppSQLite3Query& rQuery);
242 
243 
244 
245  CppSQLite3Query(sqlite3* pDB,
246 
247  sqlite3_stmt* pVM,
248 
249  bool bEof,
250 
251  bool bOwnVM=true);
252 
253 
254 
255  CppSQLite3Query& operator=(const CppSQLite3Query& rQuery);
256 
257 
258 
259  virtual ~CppSQLite3Query();
260 
261 
262 
263  int numFields();
264 
265 
266 
267  int fieldIndex(const char* szField);
268 
269  const char* fieldName(int nCol);
270 
271 
272 
273  const char* fieldDeclType(int nCol);
274 
275  int fieldDataType(int nCol);
276 
277 
278 
279  const char* fieldValue(int nField);
280 
281  const char* fieldValue(const char* szField);
282 
283 
284 
285  int getIntField(int nField, int nNullValue=0);
286 
287  int getIntField(const char* szField, int nNullValue=0);
288 
289 
290 
291  double getFloatField(int nField, double fNullValue=0.0);
292 
293  double getFloatField(const char* szField, double fNullValue=0.0);
294 
295 
296 
297  const char* getStringField(int nField, const char* szNullValue="");
298 
299  const char* getStringField(const char* szField, const char* szNullValue="");
300 
301 
302 
303  const unsigned char* getBlobField(int nField, int& nLen);
304 
305  const unsigned char* getBlobField(const char* szField, int& nLen);
306 
307 
308 
309  bool fieldIsNull(int nField);
310 
311  bool fieldIsNull(const char* szField);
312 
313 
314 
315  bool eof();
316 
317 
318 
319  void nextRow();
320 
321 
322 
323  void finalize();
324 
325 
326 
327 private:
328 
329 
330 
331  void checkVM();
332 
333 
334 
335  sqlite3* mpDB;
336 
337  sqlite3_stmt* mpVM;
338 
339  bool mbEof;
340 
341  int mnCols;
342 
343  bool mbOwnVM;
344 
345 };
346 
347 
348 
349 
350 
352 
353 {
354 
355 public:
356 
357 
358 
359  CppSQLite3Table();
360 
361 
362 
363  CppSQLite3Table(const CppSQLite3Table& rTable);
364 
365 
366 
367  CppSQLite3Table(char** paszResults, int nRows, int nCols);
368 
369 
370 
371  virtual ~CppSQLite3Table();
372 
373 
374 
375  CppSQLite3Table& operator=(const CppSQLite3Table& rTable);
376 
377 
378 
379  int numFields();
380 
381 
382 
383  int numRows();
384 
385 
386 
387  const char* fieldName(int nCol);
388 
389 
390 
391  const char* fieldValue(int nField);
392 
393  const char* fieldValue(const char* szField);
394 
395 
396 
397  int getIntField(int nField, int nNullValue=0);
398 
399  int getIntField(const char* szField, int nNullValue=0);
400 
401 
402 
403  double getFloatField(int nField, double fNullValue=0.0);
404 
405  double getFloatField(const char* szField, double fNullValue=0.0);
406 
407 
408 
409  const char* getStringField(int nField, const char* szNullValue="");
410 
411  const char* getStringField(const char* szField, const char* szNullValue="");
412 
413 
414 
415  bool fieldIsNull(int nField);
416 
417  bool fieldIsNull(const char* szField);
418 
419 
420 
421  void setRow(int nRow);
422 
423 
424 
425  void finalize();
426 
427 
428 
429 private:
430 
431 
432 
433  void checkResults();
434 
435 
436 
437  int mnCols;
438 
439  int mnRows;
440 
442 
443  char** mpaszResults;
444 
445 };
446 
447 
448 
449 
450 
452 
453 {
454 
455 public:
456 
457 
458 
460 
461 
462 
463  CppSQLite3Statement(const CppSQLite3Statement& rStatement);
464 
465 
466 
467  CppSQLite3Statement(sqlite3* pDB, sqlite3_stmt* pVM);
468 
469 
470 
471  virtual ~CppSQLite3Statement();
472 
473 
474 
476 
477 
478 
479  int execDML();
480 
481 
482 
484 
485 
486 
487  void bind(int nParam, const char* szValue);
488 
489  void bind(int nParam, const int nValue);
490 
491  void bind(int nParam, const double dwValue);
492 
493  void bind(int nParam, const unsigned char* blobValue, int nLen);
494 
495  void bindNull(int nParam);
496 
497 
498 
499  void reset();
500 
501 
502 
503  void finalize();
504 
505 
506 
507 private:
508 
509 
510 
511  void checkDB();
512 
513  void checkVM();
514 
515 
516 
517  sqlite3* mpDB;
518 
519  sqlite3_stmt* mpVM;
520 
521 };
522 
523 
524 
525 
526 
528 
529 {
530 
531 public:
532 
533 
534 
535  CppSQLite3DB();
536 
537 
538 
539  virtual ~CppSQLite3DB();
540 
541 
542 
543  void open(const char* szFile);
544 
545 
546 
547  void close();
548 
549 
550 
551  bool tableExists(const char* szTable);
552 
553 
554 
555  int execDML(const char* szSQL);
556 
557 
558 
559  CppSQLite3Query execQuery(const char* szSQL);
560 
561 
562 
563  int execScalar(const char* szSQL);
564 
565 
566 
567  CppSQLite3Table getTable(const char* szSQL);
568 
569 
570 
571  CppSQLite3Statement compileStatement(const char* szSQL);
572 
573 
574 
575  sqlite_int64 lastRowId();
576 
577 
578 
579  void interrupt() { sqlite3_interrupt(mpDB); }
580 
581 
582 
583  void setBusyTimeout(int nMillisecs);
584 
585 
586 
587  static const char* SQLiteVersion() { return SQLITE_VERSION; }
588 
589 
590 
591 private:
592 
593 
594 
595  CppSQLite3DB(const CppSQLite3DB& db);
596 
597  CppSQLite3DB& operator=(const CppSQLite3DB& db);
598 
599 
600 
601  sqlite3_stmt* compile(const char* szSQL);
602 
603 
604 
605  void checkDB();
606 
607 
608 
609  sqlite3* mpDB;
610 
612 
613 };
614 
615 
616 
617 #endif
618