【发布时间】:2014-10-20 11:01:44
【问题描述】:
我想将 pqxx::work 用于多个查询和承诺,而 commit 功能阻止我再次使用它。 这是一个简单的例子:
pqxx::connection G_connexion("dbname=basetest user=usertest password=1234");
pqxx::work G_work(G_connexion);
int main(int argc, char* argv[]) {
G_work.exec("insert into test.table1(nom) VALUES('foo');");
G_work.commit();//until here, no problem
G_work.exec("insert into test.table1(nom) VALUES('bar');"); //error, transaction already closed
G_work.commit();
}
当我尝试插入 'bar' 值时,在提交后,我得到一个 pqxx::usage_error : Error executing query. Attempt to activate transaction<READ COMMITTED> which is already closed
提交更改后如何避免关闭连接?我可以使用 G_work=pqxx::work(G_connexion) 或其他的后续等效项来重置 G_work 吗? 此外,一个错误的请求不应该使整个进程崩溃,而只是一个正在处理的请求(G_work 在失败后仍然可用)。
我必须保留相同的变量 G_Work,因为它将是一个从程序中很多地方调用的全局变量。
【问题讨论】:
-
你找到答案了吗?
-
没有。由于似乎没有人有答案,我正在为我的软件中的每个类添加一个数据库类,并在需要时通过方法传递它。一个独特的全局事务太危险了,因为如果它失败了我就无法重新激活它。
标签: c++ postgresql libpqxx