本文为数据库编程入门培训的第二讲,主要讲述一下数据库编程具体怎么实现。示例代码在本文后面的附件中可以下载。
如上篇文章所描述的那样,由于Microsoft Access数据库比较直观,适合初学者入门学习,故我在此依然以Access为例,示范如何对数据库进行编程练习; 而且,我使用的编程示例是基于Microsoft公司提供的Dao技术,虽然该技术已经早已过时,但是由于它的编程简单、明晰,很适合初学者,故依然在此使用Dao技术做数据库编程的示范,希望数据库编程高手们能够理解。
回顾上篇文章描述的,我们对数据库的操作主要分为以下几个方面:
1. 初始化/逆初始化数据库引擎 (操作数据库引擎)
2. 创建/打开/关闭数据库 (操作数据库文件)
3. 查找/打开/新增/删除一个数据表 (操作数据库的表)
4. 为一个新数据表添加字段,删除字段,修改字段属性 (操作数据库的字段)
5. 添加/删除/修改一条记录 (操作记录集)
6. 根据条件检索出满足条件的记录集 (查询和检索)
7. 其他:移动到下一条记录,获取表的总个数,获取记录的总数……
因此,我将通过示例代码来实现上述的某些基本功能,具体的各个类各个函数的用法,大家可以自己查看MSDN,里面都有非常详细的说明。
- //////////////////////////////////////////////////////////////////////////
- /// COPYRIGHT NOTICE
- /// Copyright (c) 2009, 华中科技大学tickTick Group (版权声明)
- /// All rights reserved.
- ///
- /// @file testDB.cpp
- /// @brief 数据库测试文件
- ///
- /// 本文件示范了Dao数据库访问方法
- ///
- /// @version 1.0
- /// @author 卢俊
- /// @date 2010/05/10
- ///
- ///
- /// 修订说明:
- //////////////////////////////////////////////////////////////////////////
- // 需要使用Dao技术访问数据库,必须包含afxdao.h
- #include <afxdao.h>
- #include <iostream>
- // 因为DAO技术现在微软已经不在做技术支持了,
- // 说在未来版本中可能不再支持此,所以会有警告,
- // 但因为其简单,易于初学者学习,故在此我依然拿它做例子
- // 这里,disabled掉这个警告。
- #pragma warning(disable : 4995)
- // 工程配置注意事项
- // 由于CDaoDatabase是派生于MFC的CObject类,故工程中需要加入MFC共享库的支持
- // 具体配置方法,修改VS2008左侧的工程名称上右键->属性(properties)->常规(general)->使用MFC(use of mfc)
- // 选择Use MFC in a Shared DL
- int _tmain(int argc, _TCHAR* argv[])
- {
- // 数据库操作类
- CDaoDatabase m_db;
- // 数据库用户信息表操作对象
- // MSDN上有说明,该类对象创建时需要绑定表所依附的数据库对象
- CDaoTableDef m_tableDef(&m_db);
- // 创建记录集对象
- CDaoRecordset rs(&m_db);
- // DAO引擎初始化
- AfxDaoInit();
- //创建无密码的数据库
- TRY
- {
- m_db.Create(_T("D:\\user.mdb"),dbLangGeneral,dbVersion30);
- }
- CATCH(CDaoException, e)
- {
- // 通过这条语句可以将错误描述字符串存储到szError中
CString szError = e->m_pErrorInfo-> m_strDescription; - std::cout << "error occur !" <<std::endl;
- return 0;
- }
- END_CATCH
- // 打开数据库
- if (!m_db.IsOpen())
- {
- TRY
- {
- // 参数1:数据库全路径,参数2:是否独占,参数3:是否只读模式,参数4:密码
- m_db.Open(_T("D:\\user.mdb"), TRUE, FALSE, _T(""));
- }
- CATCH(CDaoException, e)
- {
- std::cout << "error occur !" <<std::endl;
- return 0;
- }
- END_CATCH
- }
- // 创建表
- TRY
- {
- m_tableDef.Create(_T("登录信息表"));
- }
- CATCH(CDaoException, e)
- {
- std::cout << "error occur !" <<std::endl;
- return 0;
- }
- END_CATCH
- // 创建字段
- TRY
- {
- // 学号
- m_tableDef.CreateField(_T("学号"),dbText,200,dbVariableField|dbUpdatableField);
- // 密码
- m_tableDef.CreateField(_T("密码"),dbText,200,dbVariableField|dbUpdatableField);
- // 年龄
- m_tableDef.CreateField(_T("年龄"),dbLong,200,dbVariableField|dbUpdatableField);
- // 添加到数据库中
- m_tableDef.Append();
- }
- CATCH(CDaoException, e)
- {
- std::cout << "error occur !" <<std::endl;
- return 0;
- }
- END_CATCH
- // 添加一条新的记录
- TRY
- {
- // 打开记录集
- rs.Open(&m_tableDef);
- // 移动到记录集的尾部
- if (!rs.IsEOF())
- {
- rs.MoveLast();
- }
- // 准备添加一条新的记录
- rs.AddNew();
- // 学号
- rs.SetFieldValue(_T("学号"),_T("012006011208"));
- // 密码
- rs.SetFieldValue(_T("密码"),_T("123456"));
- // 年龄
- rs.SetFieldValue(_T("年龄"),_T("18"));
- // 执行添加操作到数据库
- rs.Update();
- // 关闭记录集
- rs.Close();
- }
- CATCH(CDaoException, e)
- {
- std::cout << "error occur !" <<std::endl;
- return 0;
- }
- END_CATCH
- // 获取用户记录
- TRY
- {
- // 打开记录集
- rs.Open(&m_tableDef);
- // 移动到第一条记录
- rs.MoveFirst();
- COleVariant coleUserNo;
- COleVariant colePassword;
- COleVariant coleAge;
- // 获取值
- rs.GetFieldValue(_T("学号"), coleUserNo);
- rs.GetFieldValue(_T("密码"), colePassword);
- rs.GetFieldValue(_T("年龄"), coleAge);
- // 提取出整型数
- LONG age = coleAge.lVal;
- // 提取字符串数据
- CString szUserNo = V_BSTR(&coleUserNo);
- CString szPassword = V_BSTR(&colePassword);
- // 关闭记录集
- rs.Close();
- }
- CATCH(CDaoException, e)
- {
- std::cout << "error occur !" <<std::endl;
- return 0;
- }
- END_CATCH
- // 关闭数据库
- TRY
- {
- if (m_db.IsOpen())
- {
- m_db.Close();
- }
- }
- CATCH(CDaoException, e)
- {
- std::cout << "error occur !" <<std::endl;
- }
- END_CATCH
- // DAO引擎注销
- AfxDaoTerm();
- std::cout << " 数据库文件已经输出到D://user.mdb" << std::endl;
- int temp;
- std::cin >> temp;
- return 1;
- }
希望大家仔细阅读上述代码,并通过MSDN的帮助,真正对数据库编程有一个直观的认识,以后进行其他类型的数据库编程就可以很快地上手了。
为了检验大家是否真正了解和掌握了数据库编程,下面我出一道题目,希望大家依靠自己的能力把它实现,权当练习练习。
题目:简单的登陆系统
提供简单的注册功能,注册信息包括:
用户名(不允许重复),登录密码,性别,年龄
使用Access数据库存储上述信息
程序提供如下功能:
1. 启动程序后,自动创建数据库文件、用户信息表、相应的字段
2. 能够删除数据表,然后重建数据表
3. 能够新增一条用户记录
4. 能够显示数据库中的全部用户名
5. 能够显示指定用户名的个人信息
6. 能够删除指定用户名的记录
7. 能够修改指定用户名的用户的年龄
8. 能够查询显示“年龄>18岁”的所有用户名
本文转自 Jhuster 51CTO博客,原文链接:http://blog.51cto.com/ticktick/315190,如需转载请自行联系原作者