您的位置:首页 > 数据库

SQLite封装(北京中软实训总结)

2007-05-12 18:59 169 查看
[align=left] 在此次中软的实训中,我参与了使用C++开发RSS新闻阅读器的项目。在此项目中,我主要负责了开源数据库SQLite的封装和开发。SQLite是一个轻量级的数据库,它具有跨平台和不依赖于其他软件的特征,所以是我们这个项目中数据库的合适人选。[/align]
[align=left] 在对SQLite进行封装时,我首先按照自己的经验对其进行了设计,设计出了相关的类和方法。后来在实际的使用中发现了一些问题,就对其进行了改进,并在原来的基础上优化了其性能。使用中发现的问题具体包括:1.使用过程中发生了内存泄露。经过走查代码和调试发现出现内存泄露的原因在于在堆中创建了一个对象而没有对其进行释放,我调整了一下程序的逻辑,具体采用的是用一个全局变量暂时记录当前新创建的对象,在下次调用时,删掉原来的对象并记录当前的对象,当程序退出时将这个全局变量删除。2.根据老师的建议,在程序退出时,如果用户的数据库还是打开的(客户程序员忘记调用数据库的close()方法),应该自动将其数据库关掉。 于是我在该数据库类的析构函数中加入了关闭数据库的操作。但这又导致了一个错误--如果客户程序员是在堆上创建的这个数据库对象,而在程序退出时调用了close方法将这个数据库关闭,而程序退出时调用该数据库对象的析构函数又将其关闭就会产生异常。在该类中加入一个标志变量,表明该数据库开关状态,每次在关闭数据库前根据这个标志变量判断数据库的状态,如果数据库是打开的,就将其关闭,否则不做操作,问题就解决了。[/align]
[align=left] 另外,对程序的性能进行了优化,具体措施包括:1.内存方面,将树组开到2的n次方,根据内存的访问原理(按字节取指令或访问),可以优化访存的效率。 2.减少计算,将原来for(i=0;i<s.size();i++)的语句改为int length=s.size; for(i=0;i<length;i++)的语句,减少了s.size()-1次函数调用和s.size()-1个临时变量的产生.[/align]
在完成了SQLite封装的开发后,针对SQLite中不能可视化创建数据表等缺点,我自己开发了一个辅助开发工具SQLiteEditor,用于创建表来写脚本.该程序使用MFC框架开发.用户只需要输入表名,并输入表中各列的名字和属性就可以自动将创建该表的sql语句加入脚本文件中去.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: