libpqxx 结束准备的语句和结果
libpqxx closing prepared statements and results
我将通过libpqxx和C++创建与Postgresql db的连接,然后执行几个预准备语句,这些语句返回结果(我将遍历它们)。我来自Java背景,过程是:
- 打开数据库连接
- 准备报表
- 调整预准备语句参数
- 执行语句
- 循环遍历结果集
- 关闭结果集
- 关闭准备好的声明
- 关闭数据库连接
我有 1-5 和 8 的示例代码,但我找不到如何关闭结果对象和预准备语句对象
示例代码:
connection C("dbname=mydbname user=postgres password=mypass hostaddr=127.0.0.1 port=5432");
string tableName("mydbtable");
if (C.is_open()) {
cout << "We are connected to " << C.dbname() << endl;
} else {
cout << "We are not connected!" << endl;
}
result r;
try {
const std::string sql =
"SELECT * FROM " + tableName + " WHERE sn_autoinc10 = $1";
C.prepare("find", sql);
//C.prepare("findtable", ) ("integer");
work W(C);
r = W.prepared("find")(0).exec();
for (int rownum = 0; rownum < r.size(); ++rownum) {
const result::tuple row = r[rownum];
for (int colnum = 0; colnum < row.size(); ++colnum) {
const result::field myField = row[colnum];
std::cout << myField.c_str() << ' ';
}
std::cout << std::endl;
}
C.disconnect();
} catch (const std::exception &e) {
std::cerr << e.what() << std::endl;
}
我是否需要使用 c++ 和 libpqxx 显式关闭结果和预处理语句以避免内存泄漏?提前致谢
事务和结果对象在删除时会自动清理,这意味着当它们超出范围时会被清理。
因此,您的代码不会泄漏内存,但它并不完美:
- 您不应该重用
r
变量 - 最好在try
块中声明 result 对象,这样在不需要时会立即清除它; - 您不应该在块内调用
C.disconnect()
try
- 最好只允许C
超出范围。
C++你不应该在最小需要的范围之外声明变量 - 让编译器为你优化它。
相关文章:
- 三元运算符在返回语句中给出意外的结果
- 为什么语句中的链接方法无法给出预期的结果?
- 使用嵌套 if 语句的意外结果
- 单个cout中的多个语句产生不同的结果
- 如果语句计算结果为 false,即使条件为真
- python 和 c++ 的结果对于嵌套的 for 语句是不同的
- EXPECT_NO_THROW语句的 gtest 捕获结果
- C++ to_string函数根据额外打印语句的先见之明,为浮点数和整数转换提供不同的结果
- 当我使用if语句时,为什么该程序会给我不同的结果
- 如何在QtCreator中基于SqlQuery结果执行条件语句
- 嵌套循环语句结果不正确
- 实现多个返回语句 c++ 时出现奇怪的结果
- 如何在更新语句中获取输出子句的结果
- 为什么我的 if/else 语句没有产生预期的结果?
- 奇怪的条件语句(结果相同)
- 如果.还.语句不输出预期结果.而.循环问题
- 调用函数只有在函数开头有cout语句时才会给出结果
- 在语句中调用 std::set 函数时出现意外"if"评估结果
- 我们是否可以假设下列任意一对浮点算术语句总是产生相同的结果?
- 在c++中,一些宏语句可能会产生意想不到的结果