首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Soci:创建自定义类来存储结果

Soci:创建自定义类来存储结果
EN

Stack Overflow用户
提问于 2012-10-03 14:22:42
回答 1查看 837关注 0票数 1

我使用套接字进行数据库查询。现在,我需要一个自定义的结果集类,它将环绕soci::rowset。我无法让它以下面代码的方式工作,因为复制构造函数在soci中是私有的(根据源文件不支持)。如果没有复杂的代码,如何才能使用带有soci::行列表的包装器(特此为ty以至行)完成包装?任何关于如何进行的设计或方向都会受到赞赏。

我的头文件

代码语言:javascript
复制
typedef soci::row Row; 


class ResultSet
{
public:
    ResultSet();
    ~ResultSet();
    void Copy(soci::rowset<soci::row>& rs);

    Row GetNextRow();
    bool HasRows();

private:
    soci::rowset<soci::row> m_rows;
    soci::rowset_iterator<soci::row> m_iterator;
    bool m_isAccessed;//if first access on row is done
};

源文件

代码语言:javascript
复制
ResultSet::ResultSet() {
    m_isAccessed=false;
}

ResultSet::~ResultSet() {

}

Row ResultSet::GetNextRow() {
    if(m_isAccessed) {
        m_iterator++;//increment row
        m_isAccessed=true;
    }
    return *m_iterator;
}

bool ResultSet::HasRows() {
    return m_iterator!=m_rows.end();//it have not reached the end yet;
}

void ResultSet::Copy(soci::rowset<soci::row>& rs) {
    m_rows = rs;
    m_iterator = rs.begin();//put it at row 1
}

下面是我如何在连接的ExecuteQuery函数中使用。m_session是soci::session

代码语言:javascript
复制
void ConnectionMgr::ExecuteQuery(wxString& sql, ResultSet& rs) {
    try { 
        soci::rowset<soci::row> rsInternal = m_session.prepare<<sql.ToStdString();
        rs.Copy(rsInternal); 
    }
    catch (std::exception const& e) {
        m_error = wxString::Format(wxT("SqlQuery close error:%s\n"), e.what());
    }
}

我想在以后使用该类的示例

代码语言:javascript
复制
wxString sql = wxT("-- a query\n SHOW DATABASES;"); 
                ResultSet rs;
                m_conn->ExecuteQuery(sql, rs);
                while(rs.HasRows())
                {
                    wxString name = wxString(rs.GetNextRow().get<std::string>(0));
                    //work with name here
                }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-30 07:50:33

SOCI有许多限制,如果不修改源代码,执行这样的任务似乎是不可能的,这意味着您必须自己维护更改(除非开发人员接受补丁,这是一种可能性)。

由于我使用wxWidgets,我决定将数据库层恢复为wxDatabase,并将使用它并维护它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12710532

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档