0

朋友们,美好的一天。我正在使用pqxx,我有一些问题。

1. 我有两张表: table1 (table1_id integer) and table2 (table1_id integer, another_id integer)一对多的关系。如何轻松获取视图中的信息,例如:table1_id、向量 another_ids?现在我在脚本中使用序列化(字符串连接到“%d %d %d ...”)并在我的 c++ 代码中反序列化。我还需要在 table1 中插入值。我如何在一笔交易中做到这一点?

2.我把存储过程称为

    t.exec("SELECT * FROM my_proc(some_argument)");

可能存在任何方式来做到这一点,就像在 c# 中一样?

非常感谢!

4

1 回答 1

0

所以,也许它可以帮助某人。

在第一种情况下,我找到并使用了两种方法: 1. 在 sql 函数中对 concat 进行分组,在 c++ 中进行反序列化。如果 table2 只有 table1_id 和另一个整数,它会很快。2. 我调用了两个函数:get_table1() 和 get_table2(),按 table1_id 排序。然后用两个指针创建 table1 数组:

std::vector<Table1> table1Array;
auto ap = wrk.prepared(GetTable1FuncName).exec();
auto aps = wrk.prepared(GetTable2FuncName).exec();
auto pos = aps.begin();
for (auto row = ap.begin(); row != ap.end(); ++row) {
    std::vector<Table2> table2Array;
    while (pos != aps.end()
           && row["table1_id"].as(int()) == pos["table1_id"].as(int())) {
        table2Array.push_back(Table2(pos["first_id"].as(int()), 
                                     pos["second_string"].as(std::string())));
        ++pos;
    }

    Table1 tb1(row["table1_id"].as(int()), row["column2"].as(int()),
               row["column3"].as(int()), row["column4"].as(int()),
               table2Array);

    table1Array.push_back(tb1);
}

可能它不漂亮,但它正在工作。插入我为一个元素编写的数据库。先插入Table1,多行后插入Table2。通话后pqxx::work.commit()

在第二种情况下,不,不存在。还要记住,函数总是返回 1 行!当心!

于 2016-09-30T04:32:52.927 回答