c++ - 在不绑定参数的情况下使用 OTL 库 (c++) 插入
问题描述
我正在尝试使用 OTL 对 sql server db 进行基本插入。对于这个插入,我不需要绑定任何参数。
otl_stream o_stream;
std::string query = "INSERT INTO common VALUES (1,2,3);";
o_stream.open(1, query.c_str(), db_);
o_stream.flush();
o_stream.close();
但是,即使在刷新和关闭 otl_stream 之后,数据库仍被锁定在该表上(无法通过单独的应用程序读取)。我必须关闭我的 otl 应用程序才能解锁表。
如果我参数化插入语句,那么一切都会正常工作(插入成功,没有表锁定)。
otl_stream o_stream;
std::string query = "INSERT INTO common VALUES (1,2,a:<int>);";
o_stream.open(1, query.c_str(), db_);
o_stream << 3;
这并不理想,因为理想情况下,如果没有必要,我想避免参数化/绑定。有什么建议么?
编辑:
下面回答
解决方案
来自 OTL 库的作者:
otl_streams 旨在被重用,也就是说,一个 INSERT 语句流需要至少有一个绑定变量才能“刷新”。对于有 0 个绑定变量的情况,有: http: //otl.sourceforge.net/otl3_const_sql.htm。
该链接缺少所需的 db.commit() 调用。如果没有提交调用,表将被锁定。
问题中给出的示例的解决方案:
std::string query = "INSERT INTO common VALUES (1,2,3);";
db_.direct_exec(query.c_str());
db_.commit();
推荐阅读
- python - 如何在字符串列表中找到几个字符中的第一个和最后一个?
- java - 无法将 java.lang.String 类型的值转换为 int?
- node.js - Discord Node.js bot 将收到的消息记录到控制台
- javascript - 无法识别的 JavaScript 语法
- html - 使用选项卡按钮时更改突出显示的按钮颜色
- vue.js - Bootstrap vue 分页样式
- powershell - 如何在PowerShell中将字符串转换为双精度?
- java - Tesseract 工作正常,除了在一台设备上给我 Windows Server 2012 r2 找不到指定的模块
- azure-active-directory - 从 msal angular 迁移到 azure webapp 身份验证
- python - 代表蜂窝格子的最佳方式是什么?