65.9K
CodeProject 正在变化。 阅读更多。
Home

SQLite3 MFC 包装器

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.39/5 (13投票s)

2005年4月7日

CPOL

4分钟阅读

viewsIcon

262992

downloadIcon

8665

一个支持 Unicode/Pocket PC 2003 的 SQLite3 MFC 封装。

引言

这是另一个著名的 SQLite3 数据库引擎的封装。虽然 Code Project 上有其他几个封装,但我认为它们不支持 MFC/Unicode,或者没有在 Pocket PC 上测试过结果。

此封装的源代码基于 rene.nyffenegger@adp-gmbh.ch 提供的 SQLiteWrapper 源代码。我在将其打包供 Microsoft MFC 使用时修改了原始源代码。在此次练习中,我的主要目标是使该封装同时适用于 MCBS 和 Unicode,因为 Unicode 在 Pocket PC 上是原生支持的。此封装与作者的原始源代码之间有四个主要区别。

  • 首先,所有 `std::string` 的实例都被转换成了 Microsoft 的通用字符串指针,使用了 `LPCTSTR`。对于习惯使用 MFC 的开发者来说,这应该很熟悉。这也意味着,如果您希望在桌面和 Pocket PC 之间保持兼容性,应该大量依赖 Microsoft 的 `TEXT` 或 `_T` 宏来处理硬编码的字符字符串。
  • 其次,我将类 `SQLiteStatement` 改名为 `CSqlStatement`,将 `SQLiteWrapper` 改名为 `CDbSQLite`。这主要是出于个人偏好,因为大多数 MFC 开发者都认识到 Microsoft 的 "Cx" 命名约定。
  • 第三,我从封装中移除了异常处理。Windows CE 不支持传统的 `try、`catch 和 `throw 范例,因此在错误处理方面,您基本上需要自己负责。
  • 最后,我添加了头文件 *SQLite3i.h*,其中包含 `typedefs,指向各种 *sqlite3.h* 函数。这些类型定义是 SQLite3 函数的“内部”访问器,在编译时有条件地使用 UTF-8 或 UTF-16 变体。为了让您感兴趣,我在头文件中加入了一个 pragma,在您编译 Unicode 或 MCBS 时通知您。

使用说明

此处提供的测试程序是简单的 MFC 对话框应用程序,包含两个按钮、一个编辑框和一个列表控件。“创建”按钮用于向数据库中添加三条记录。“查看”按钮用于将数据库记录填充到列表控件中。多次点击“创建”按钮是可以接受的。您甚至可以多次点击以观察报告的任何错误。编辑框仅用于显示状态信息。

此代码已在 Windows 桌面和 Pocket PC 上进行了测试。作为我测试的一部分,我将 Pocket PC 创建的数据库移至我的桌面,然后使用桌面应用程序进行了查看。

免费赠品

ZIP 文件包含修改后的封装的源代码,以及桌面和 Pocket PC 应用程序的代码。我提供的项目包括:

  1. 创建 *w32SQLite3.dll* 的项目。
  2. 创建 *wceSQLite3.dll* 的项目。
  3. 创建桌面测试应用程序的项目。
  4. 创建 Pocket PC 测试应用程序的项目。

从这个列表可以看出,您必须先构建 DLL 文件才能使用我提供的测试应用程序。为此,您应该从 SQLite 下载页面获取 W32 DLL 的源代码,并将其存放在 *sqlite3* 目录中。您应该从 SQLite for Windows CE 站点获取 WCE DLL 的源代码,并将其存放在 *wince* 目录中。

一旦构建了两个 DLL 文件,请将它们及其对应的 *.lib* 文件移至 LIB 目录。应用程序项目将在该位置查找这些文件。

警告和免责声明

  • 所有这些项目都假定您经验丰富 MFC 开发,并且精通导航 Microsoft 的 IDE 以配置编译器。
  • 此处提供的所有项目都**依赖**于 zip 文件中存储的目录结构。如果您偏离此结构,请不要提交“编译失败,因为编译器找不到适用的头文件”的报告。
  • 桌面解决方案是使用 Visual Studio 2003 创建的,因此请不要提交任何关于您无法使用旧版本 VC 或其他编译器加载项目的疑问。
  • CE 项目是使用 eMbedded Visual C++ v4.00 创建的,因此请不要提交任何关于您无法使用其他编译器加载项目的疑问。
  • 示例代码是纯 MFC,因此请不要就您对可移植性或代码膨胀的任何想法发表评论。这里的整个目的是在 Windows CE 上使用 MFC 来使用 SQLite。
  • 此代码已在 Win2K 桌面和 Symbol PDT-8100 上进行了测试,使用了 Microsoft Pocket PC 版本 4.20.0。您在较低版本上的结果,谁也无法预测。
  • 这些项目是使用 SQLite3 版本 3.2.8 和 SQLite for Windows CE 版本 3.2.2 的源代码编译的。未来版本编译时遇到的问题很可能归因于项目中缺少应包含的源文件。

鸣谢

我选择 Rene 的 SQLite Wrapper 作为此次练习的起点,是因为它非常简单。换句话说,任何关于缺少功能的投诉都将石沉大海,因为您绝对可以自由地将 CppSQLiteDarkside SQL 移植到 Pocket PC,然后将您的结果发布到 Code Project 以便大家受益。

© . All rights reserved.