Click here to Skip to main content
15,885,366 members
Articles / Database Development / SQL Server

SQLite3 MFC Wrapper

Rate me:
Please Sign up or sign in to vote.
4.39/5 (13 votes)
29 Dec 2005CPOL4 min read 253.8K   8.6K   74   55
A SQLite3 MFC wrapper with Unicode/Pocket PC 2003 support.

Introduction

Here is another wrapper for the famous SQLite3 database engine. While there are several other wrappers available here at Code Project, I don't believe they support MFC/Unicode or have the results tested on a Pocket PC.

The wrapper source code is based on the SQLiteWrapper source produced by rene.nyffenegger@adp-gmbh.ch. I altered the original source while packaging it for use with Microsoft MFC. My primary objective in this exercise was to make the wrapper suitable for both MCBS and Unicode because Unicode is native to the Pocket PC. There are four key differences between this wrapper and the author's original source.

  • First, all the instances of std::string were converted to Microsoft's generic string pointers using LPCTSTR. This should be familiar to developer's accustomed to working with MFC. This also means that you should rely heavily on the Microsoft TEXT or _T macros for hard-coded character strings should you wish to maintain portability between the desktop and the Pocket PC.
  • Second, I have changed the class SQLiteStatement to CSqlStatement and SQLiteWrapper to CDbSQLite. This was primarily a matter of preference since most MFC developer's recognize Microsoft's conventions for the "Cx" nomenclature.
  • Third, I removed exception handling from the wrapper. Windows CE does not support the traditional try, catch and throw paradigm so you are basically on your own with respect to error handling.
  • Finally, I have added the header SQLite3i.h with typedefs to the various sqlite3.h functions. These type definitions are "internal" accessors to the sqlite3 functions conditionally utilizing either the UTF-8 or UTF-16 variation during compilation. For your entertainment, I incorporated a pragma in the header to inform you when you are compiling Unicode or MCBS.

Care and feeding

The test programs provided here are simple MFC dialog applications incorporating two buttons, an edit box and a list control. The "Create" button is used to populate the database with three entries. The "review" button is used to populate the list control with the database records. It is acceptable to click the "Create" button more than once. You may even wish to do so to observe any errors reported. The edit box is used simply for status info.

This code was tested on a Windows desktop and on a Pocket PC. As part of my test, I moved the database created by the Pocket PC to my desktop and then reviewed it using the desktop application.

Free with your purchase

The ZIP file contains the source code for the altered wrapper as well as code for both a desktop and Pocket PC application. The projects that I have provided include:

  1. Project to create the w32SQLite3.dll.
  2. Project to create the wceSQLite3.dll.
  3. Project to create the desktop test application.
  4. Project to create the Pocket PC test application.

As you might gather from this list, you must first build the DLL files for use with the test applications that I have provided. In order to do this, you should obtain the source from the SQLite Download Page for the W32 DLL and deposit it into the sqlite3 directory. You should obtain the source for the WCE DLL from the SQLite for Windows CE site and deposit it into the wince directory.

Once you have constructed the two DLL files, move them and their corresponding .lib files to the LIB directory. The application projects will search for these files in that location.

Warnings and disclaimers

  • All of these projects assume that you are experienced with MFC development and proficient in navigating Microsoft's IDE to configure the complier.
  • All of the projects provided here are dependent upon the directory structure stored in the zip file. If you deviate from this structure, please do not submit reports that " compilation fails because the compiler cannot locate the applicable header files".
  • The desktop solutions were created using Visual Studio 2003, so please don't submit questions informing me that you cannot load the project with a prior version of VC or a different compiler.
  • The CE projects were created using eMbedded Visual C++ v4.00, so please don't submit questions informing me that you cannot load the project using a different compiler.
  • The sample code is pure MFC so please don't submit comments about any notions you may have about portability or code bloat. The whole purpose here was to use SQLite on Windows CE using MFC.
  • This code was tested on a Win2K desktop and a Symbol PDT-8100 with Microsoft Pocket PC Version 4.20.0. Your results on anything less are anybody's guess.
  • These projects were compiled with the source code from SQLite3 Version 3.2.8 and SQLite for Windows CE Version 3.2.2. Problems compiling with future versions are most likely due to missing source files that should be included in the project.

Film credits

I selected Rene's SQLite Wrapper as the starting point for this exercise because of it's sheer simplicity. In other words, any complaints about missing functionality will fall upon deaf ears since you are most certainly welcome to port CppSQLite or Darkside SQL to Pocket PC and then post your results to Code Project for everyone's benefit.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Software Developer
United States United States
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
Generalwindows mobile 5.0 Pin
GVR197929-Nov-06 11:11
GVR197929-Nov-06 11:11 
GeneralRe: windows mobile 5.0 Pin
midnightEngineer4-Dec-06 6:54
midnightEngineer4-Dec-06 6:54 
GeneralOther unicode wrapper Pin
Softvoile27-Nov-06 22:17
Softvoile27-Nov-06 22:17 
Generalcompile problems ..... Pin
asdklasjdlaskj8-Aug-06 12:34
asdklasjdlaskj8-Aug-06 12:34 
GeneralRe: compile problems ..... [modified] Pin
midnightEngineer8-Aug-06 15:00
midnightEngineer8-Aug-06 15:00 
GeneralRe: compile problems ..... Pin
DHarman9-Aug-06 3:02
DHarman9-Aug-06 3:02 
GeneralRe: compile problems ..... Pin
midnightEngineer9-Aug-06 4:39
midnightEngineer9-Aug-06 4:39 
GeneralRe: compile problems ..... Pin
DHarman9-Aug-06 9:46
DHarman9-Aug-06 9:46 
You are absolutely correct. os.c is the only file needed to make it compile. The other 2 should not be copied.

Thanks for all the replies Smile | :)

GeneralCP_ACP -> CP_UTF8 Pin
Softvoile18-Jul-06 7:52
Softvoile18-Jul-06 7:52 
GeneralRe: CP_ACP -> CP_UTF8 [modified] Pin
midnightEngineer18-Jul-06 10:05
midnightEngineer18-Jul-06 10:05 
GeneralRe: CP_ACP -> CP_UTF8 Pin
Softvoile18-Jul-06 19:19
Softvoile18-Jul-06 19:19 
GeneralCSqlStatement::Bind(int pos_zero_indexed, LPCTSTR value) is not correct ! Pin
ki11er4-May-06 21:45
ki11er4-May-06 21:45 
GeneralLast insert ID Pin
gazmac27-Feb-06 12:40
gazmac27-Feb-06 12:40 
GeneralRe: Last insert ID Pin
midnightEngineer28-Feb-06 6:26
midnightEngineer28-Feb-06 6:26 
GeneralRe: Last insert ID Pin
gazmac28-Feb-06 10:46
gazmac28-Feb-06 10:46 
NewsWrong link Pin
Massimo Colurcio29-Dec-05 14:11
professionalMassimo Colurcio29-Dec-05 14:11 
GeneralRe: Wrong link Pin
midnightEngineer29-Dec-05 17:05
midnightEngineer29-Dec-05 17:05 
GeneralCannot build wceSQLite3.dll Pin
gerhard4527-Dec-05 11:44
gerhard4527-Dec-05 11:44 
GeneralRe: Cannot build wceSQLite3.dll Pin
midnightEngineer28-Dec-05 3:53
midnightEngineer28-Dec-05 3:53 
GeneralOther memory leaks Pin
Mathieu Desrochers3-Nov-05 5:34
Mathieu Desrochers3-Nov-05 5:34 
GeneralRe: Other memory leaks Pin
midnightEngineer28-Dec-05 4:58
midnightEngineer28-Dec-05 4:58 
GeneralNewest sqLite3 Pin
Floppe31-Aug-05 22:26
Floppe31-Aug-05 22:26 
GeneralRe: Newest sqLite3 Pin
midnightEngineer28-Dec-05 3:55
midnightEngineer28-Dec-05 3:55 
QuestionUpdate column from another column of an existing table in SQLite?? Pin
Member 45151626-Apr-05 2:58
Member 45151626-Apr-05 2:58 
GeneralMemory leak Pin
jschisler18-Apr-05 9:27
jschisler18-Apr-05 9:27 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.