MySQL在Windows移动设备上的轻量级客户端实现

MySQL是一个流行的开源数据库管理系统,它支持多种操作系统,包括Linux和Windows。然而,对于Windows移动设备,需要一个特殊的ODBC驱动程序,称为"MySql Connector",以便通过任何Microsoft DB API(如ADO)来使用它。此外,每当MySQL有重大更新时,例如最近的4.1版本,都需要重新安装这个驱动程序。这不仅增加了客户端机器的维护负担,而且对于希望实现"点击即运行"业务模式的应用程序来说,也是一个问题。

为了解决这个问题,开发了一个轻量级的MySQL客户端,它不需要安装任何额外的驱动程序或运行时环境。这个客户端利用了Windows自带的msvcrt.dll库,这样就不需要为了像strlen()这样的函数而分发新的Visual C++运行时环境。希望微软有一天能够通过服务包来分发这些运行时环境,使它们更加普及。

Windows上编译MySQL的源代码是一个挑战,因为它缺少项目文件,而且构建系统也相当复杂。经过多次尝试,决定实现一个最小化的本地MySQL客户端,它不需要libmysql库的大部分功能。这样做的好处是,可以做一些之前无法想象的事情,比如在不需要重新认证的情况下重用SQL连接,或者将非查询命令镜像到更多的SQL服务器上,从而实现即时且事务性的备份。

此外,还可以实现负载均衡,通过询问SQL服务器的CPU和内存使用情况,将SQL查询发送到负载最轻的服务器上。这种客户端非常小,不依赖外部运行时环境,因此很容易移植到移动设备上。

这个微型客户端的基本组成部分如下:

  • 连接和认证
  • 发送SQL命令
  • 收集和显示结果

这是一个非常基础的实现,满足了项目第一阶段的所有需求。它处理了所有常见的数据类型,如字符串、整数和日期。源代码中的文档链接是部分的。

#include <windows.h> #include <wincrypt.h> #include <commctrl.h> #pragma comment(lib,"wsock32.lib") #pragma comment(lib,"crypt32.lib") #pragma comment(lib,"comctl32.lib") char *user = "root"; BYTE* pasw = (BYTE*)"your_password"; HWND list; BYTE temp[20], resp[20], *chal; DWORD WINAPI Sql(void *command, void *onvalue=0, void *onfield=0) { // ...省略代码... } void OnValue(char *txt, int row, int col, int typ) { // ...省略代码... } void OnField(char *txt, int row, int col, int len) { // ...省略代码... } long GetLong(char *txt) { return atol(txt); } int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmnd, int show) { // ...省略代码... }
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485