注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

多多的爹

 
 
 

日志

 
 

MFC到wxWidgets移植笔记(10)——数据访问接口  

2008-05-15 22:37:01|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

上一篇谈到了对sqlite3的封装,下面完整的描述数据访问接口。

数据访问接口模仿ADO设计,保存了查询结果。接口的最小的单位为Field,记录字段数据。其次为Record,描述一条记录。再就是RecordSet,是记录集合。数据库封装类为Database。所有的数据库访问接口都以DB开头。

MID表示主键类型,定义如下:

typedef unsigned long MID;

MTIME是对时间的封装类:

struct MTIME{
long year;
long month;
long day;

};

以下是数据结构定义:

class DBField
{
public:
    DBField();
    virtual ~DBField();

public:
    virtual void SetField(const wxString& field, const wxString& value);
    virtual const wxString& Field()const;
    virtual const wxString& Value()const;

private:
    wxString m_field;
    wxString m_value;
};

class DBRecord
{
public:
    DBRecord();
    virtual ~DBRecord();

public:
    virtual void AddField(const wxString& field, const wxString& value);
    virtual bool GetField(const wxString& field, wxString& value)const;

private:
    typedef std::vector Fields;
    Fields m_fields;
};

class DBRecordSet
{
public:
    DBRecordSet();
    virtual ~DBRecordSet();

public:
    virtual void Clear();
    virtual long RecordCount()const;

    virtual void MoveFirst();
    virtual bool MoveNext();
    virtual bool GetField(const wxString& field, wxString& value)const;
    virtual bool GetField(const wxString& field, MTIME& tm)const;
    virtual bool GetField(const wxString& field, MID& id)const;
    virtual bool GetField(const wxString& field, long& l)const;
    virtual bool GetField(const wxString& field, double& d)const;
    virtual bool GetField(const wxString& field, bool& b)const;

    virtual void AddRecord();
    virtual void AddField(const wxString& field, const wxString& value);
    virtual void AddField(const wxString& field, const MTIME& tm);
    virtual void AddField(const wxString& field, MID id);
    virtual void AddField(const wxString& field, long l);
    virtual void AddField(const wxString& field, double d);
    virtual void AddField(const wxString& field, bool b);

private:
    typedef std::vector Records;
    Records             m_records;
    Records::size_type  m_pos;
};

interface IDatabase
{
    virtual void BeginTrans()=0;
    virtual void CommitTrans()=0;
    virtual void RollbackTrans()=0;
    virtual bool Execute(const wxString& sql)=0;
    virtual bool QueryRecordSet(const wxString& sql, DBRecordSet* set)=0;
    virtual wxString GetLastError()const=0;
};

struct sqlite3;

class DBDatabase : public IDatabase
{
public:
    DBDatabase();
    virtual ~DBDatabase();
    static wxString GetDBFile();

public:
    bool InitConnection();

    virtual void BeginTrans();
    virtual void CommitTrans();
    virtual void RollbackTrans();
    virtual bool Execute(const wxString& sql);
    virtual bool QueryRecordSet(const wxString& sql, DBRecordSet* set);
    virtual wxString GetLastError()const;

private:
    static int sqlite3_callback(void* para, int n_column, char** column_value, char** column_name);

private:
    sqlite3*    sqlite3DB;
    wxString    m_err;
};

  评论这张
 
阅读(4)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017