Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1569755
  • 博文数量: 884
  • 博客积分: 52280
  • 博客等级: 大将
  • 技术积分: 13060
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-06 09:46
文章分类

全部博文(884)

文章存档

2008年(884)

我的朋友

分类: C/C++

2008-08-06 10:04:44

下载本文示例代码
CStorage类在应用程序启动时建立并初始化,在应用程序退出前清理。


m_Storage.SetConnString("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Book.mdb");

if(!m_Storage.Initialize() MessageBox("存储系统初始化失败!");



//借书功能测试

	CBorrowBook  borrowbook;  	//借书类与图书类之间的关联视图

	CBorrow      borrow;			//借书类

	borrowbook.SetBookNumber("10001");

	if(!m_Storage.ReadEntity(&borrowbook)) break;

	borrow. SetPersonName(borrowbook.GetPersonName());

borrow. SetBorrowDate(borrowbook.GetPersonName());

	if(m_Storage.SaveEntity(&borrow)) MessageBox("借书成功");



……//查找书价>90元的图书

CEntitySet books("book"); 

	books.SetConn(m_Storage.GetConn());

CBook* pBook = NULL;



	books.SetSQLString("price>90"); 

	books.Execute();

	int count = books.GetSize();

	m_ListCtrl.DeleteAllItems();		//列表视图控制

	for(int index = 0; index < count; index  )

	{

		pBook = books[index];

		m_ListCtrl.InsertItem(index, pBook->GetBookNumber());

……

}		

五、总结

  从上面的设计和源程序中可以看出,CStorage类和CEntitySet类并没有访问和操纵数据库记录集,数据库的存取操作实际上由实体对象来完成,这样对于不同的实体对象和数据表结构,系统都可以正常工作,且即使增加新的实体对象也不会影响模块本身结构的稳定性。
实体对象是对应用域中概念的描述,它只应该向外提供属性(或字段)赋值与读取操作,其数据库操作接口应声明为私有成员,不应该向应用系统提供。为了保证CStorage类和CEntitySet类可以向数据库存取实体对象,本模块根据C 多态特性,在这两个类中用指向CEntity类的指针来调用实体对象的存取接口,这样在实体对象将数据库存取接口声明为私有成员后,整个模块仍能正常工作。

六、附注

  1. 实体对象名必须与数据表名相同。
  2. 本模块的并不仅限于用C 语言实现,使用Java和C#同样可以完成。
  3. 本模块作适当调整,可以适用其他的数据访问模型,如ODBC、DAO。
  4. 使用对象存储,数据库操作性能会略有下降,这也和实体类的具体实现有关。
  5. 开发环境为VC6。
下载本文示例代码
阅读(330) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~