4.5. Hello Database 准备
“Hello GUI 布局篇”才是“Hello Database”小节最初的准备。
我们将通过三个小节的内容,来完成“Hello Database”的学习。首先是本节的“准备篇”,用以完成以下四个任务:
了解数据库应用编程(“客户/服务”二层结构)的基本概念;
- 在Code::Blocks中配置和“Hello Database”项目有几个C++扩展库的全局路径变量;
- 了解 “Hello Database”项目的基本需求;
- 准备“Hello Database”所需要的数据。
完成本小节之后,我们才正式开始两个版本的“Hello Database”的编程学习。这两上版本是:
控制台版:重点在于学习如何使用MySQL++连接数据库、查询简单数据,以及如何使用查询所得到的数据。
图形界面版:学习如何查询与使用复杂数据(图片)。同时学习如何用wxWidgets构建典型的数据展现界面。
4.5.1. 数据库应用典型结构
一个典型的“C/S”二层结构的应用的程序网络结构如下图:
图 87 典型的C/S数据库应用程序结构
其 中客户端程序用以和软件最终用户直接打交道。主要数据都存储在“数据库服务”中,客户端可以从服务端“获取”数据,也可以向服务端插入数据——你想到 cin和cout了吗?你想到ifstream和ofstream 吗?数据库也是一个典型的“数据进出之处”,只不过远远复杂于控制台或文件。
如上图所示,一个数据库,可以,并且通常都需要,同时向多个客户端提供服务。 而磁盘上普通的文件通常无法支持大量并发的,读写操作。
由 于要支持多个客户端并发读写,一个运行中的数据库会很“繁忙”,“工作压力”很大,所以通常,“数据库服务”通过被单独安装在一服务器上。不过这并不是必 须的,比如在开发程序时,我们就可以把服务端安装在开发程序时所使用的机器上。 当然如果你家里确实有两台电脑,那么我也不反对你把MySQL安装到另一台电脑上。
我们已经第二章完成了MySQL的安装,也就是说我们已经有了“数据库服务”。接着我们就来写一个“客户端”程序,先是本小节的“控制台版”,然后是下一小节的“GUI版”。
4.5.2. 了解数据编码
我们预先准备在数据库中的数据,采用GBK字符集(兼容GB2312),因此对于“Hello Database 控制台”版,当数据从数据库中“流出”,到达程序,再被程序输出到“控制台”的过程中,并不存在编码转换的需求,如下图所示:
图 88 数据库->应用程序->控制台编码变换
到了“Hello Database GUI 版”,由于应用程序采用UNICODE版本的wxWidgets库来实现图形界面,这时就发生了查询数据库所获得的数据,其编码与应用程序及Windows图形界面解读字符串所用编码不一致的情况。
图 89 数据库-应用程序-图形用户界面编码变换
在 这种情况下,如果将从数据库获得的数据,直接显示到图形界面上,将会出现乱码。 我们在“Hello Internet”小节中,学习过如何将GB2312编码转换成UNICODE;在“Hello Database GUI 版”,我们还将学习如何将UNICODE转换为GB2312。
4.5.3. 基本需求
北京2008年第29届奥运会,我国获得了51枚金牌,本程序将按照获牌时间次序,在屏幕上打印出每一块金牌的“获奖次序”、“冠军姓名”、“获将日”、“获奖项目”、“成绩”等信息。
在“控制台版”,我们只是逐条地打印出上述信息;在“GUI 版”,我们将记录显示一个“表格”中,还允许用户点击某一条记录,显示获奖记录对应的相片和简介。
4.5.4. 准备数据
所有以上提及的数据,都保存在数据库中。通常,数据库也由程序开发者建立及维护,但出于不让事情在一开始就过于复杂化,我已经为大家准备了这些数据,请大家按下述步骤,将数据导入已经安装在你的电脑上MySQL数据库。
步骤 1:请从配套光盘复制,或从“第二学堂网站”下载文件:“backup_d2school_champions_2008.7z”,使用7zip(建议)或WinRAR解压,得到文件:“backup_d2school_champions_2008.sql”。
步骤 2:在“开始”菜单,MySQL程序组运行“MySQL Administrator”。在左边栏选择“恢复”。在右边操作区内点击“打开备份文件”按钮,然后找到并打开步骤1得到的“backup_d2school_champions_2008.sql”文件。
步骤 3:在右边操作区中,点击“开始恢复”。
步骤 4:在左边栏中选择“目录”,如果在左下角的“数据库”列表中看到“d2school”,则表明数据库导入成功。点击“d2school”,应能在右边操作区中,看到表“champions_2008”。
白话C++