大家好。我正在使用pqxx
,我有一些问题。
1。我有两个表:table1 (table1_id integer) and table2 (table1_id integer, another_id integer)
,一对多关系。我怎么能很容易地获得信息,在视图:table1_id,向量another_ids?现在我在脚本中使用序列化(字符串连接成"%d %d %d…"),在我的c++代码中使用反序列化。此外,我需要插入值到表1。我怎样才能在一次交易中完成呢?
2。我调用像
这样的存储过程 t.exec("SELECT * FROM my_proc(some_argument)");
可能存在任何方法来做到这一点,像在c#?
非常感谢!
所以,也许它可以帮助别人。
在第一种情况下我发现并使用两种方法:1. sql函数中的组连接和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);
}
也许它不漂亮,但它在工作。插入到数据库我写的一个元素。首先插入到表1中,然后插入到表2中。After call pqxx::work.commit()
.
第二种情况 Not,不存在。还要记住,函数总是返回1行!小心!