Firebird C 客户端 API:语句、事务和游标生命周期
Firebird C client API: statement, transaction and cursor lifecycle
上下文:Firebird 2.5,C 客户端 API。
我想了解语句、事务和游标对象的生命周期。这是我所做的(伪代码):
class Query {
isc_tr_handle _transaction;
isc_stmt_handle _statement;
XSQLDA* _in_sqlda;
XSQLDA* _out_sqlda;
void prepare(){
isc_dsql_allocate_statement(...,&_statement,...);
isc_dsql_prepare(&_transaction, &_statement);
}
void execute(Input* input, Output* output) {
... copy input to _in_sqlda
isc_dsql_set_cursor_name(status, &_statement, Name(), NULL);
isc_dsql_execute(status, &_transaction, &_statement, 1, in_sqlda);
while(fetch()) {
... copy _out_sqlda to output
}
isc_dsql_free_statement(status, &_statement, DSQL_close);
}
void commit() { isc_commit_transaction(status, &_transaction); }
};
调用isc_dsql_free_statement
只是关闭光标?statement
仍然有效,我可以一次又一次地调用不同的输入执行?
isc_dsql_free_statement
的作用取决于第三个参数。有三个有效值(另请参阅 Interbase 6.0 API Guide 和 Firebird 2.5 发行说明):
-
DSQL_close
:关闭打开的游标(如果有),但保留当前语句,并且句柄仍然有效。 -
DSQL_drop
:关闭打开的游标(如果有),取消准备当前语句并删除语句句柄。 -
DSQL_unprepare
(在 Firebird 2.5 中添加):关闭打开的游标(如果有),取消准备当前语句,但句柄本身仍然有效。
在代码中使用 isc_dsql_free_statement(status, &_statement, DSQL_close);
这意味着游标已关闭(如果有),当前语句保持就绪状态并且可以再次执行(或者您可以在此句柄上准备另一条语句)。
相关文章:
- 如何在 Windows API 中更改系统范围的多个游标
- 在C++事务之间存储大量字符数据的有效方法
- 有没有办法在不重新启动或注销的情况下加载游标?
- MySQL 事务和缓冲的请求列表
- C++ PQXX 工作事务崩溃
- 英特尔®事务同步扩展新指令 (TSX-NI) 与英特尔 TSX 有何不同?
- C++Poco ODBC事务-自动提交模式
- 在什么条件下,数据库在从 cpp 执行选择查询时不会关闭游标
- QThread 中的 QTcpSocket 将提交事务,但当 Write 被调用时"Cannot create children for a parent that is in a different
- 是否允许在同一 Sqlite 数据库连接中启动多个事务
- 条件语句,用于验证事务模块(.cpp)标头中#define(d)整数提供的范围
- 任何与游标Labquest迷你通信的方式
- 如何在 C++ 控制台应用程序中将输入与输出分开?我可以有两个游标吗?
- 可视化如何使用C++在 SQLite3 数据库上实现回滚事务
- 如何在小型聊天应用程序中为数据库存储的用户事务建模
- 中止的xbegin事务是否还原xbegin启动时存在的堆栈上下文
- 数据库连接对象的名称游标的历史记录是什么
- 在Smalltalk中设计事务管理器
- 如何在C++中创建事务流
- Firebird C 客户端 API:语句、事务和游标生命周期