我正在尝试使用OTL在sql服务器数据库中执行基本插入操作。对于这个插入,我不需要绑定任何参数。
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应用程序来解锁表格。
如果我将insert语句参数化,那么一切都会正常工作(插入成功,没有表锁)。
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;这并不理想,因为理想情况下,如果没有必要,我希望避免参数化/绑定。有什么建议吗?
编辑:
答案如下
发布于 2021-07-08 20:33:23
来自OTL库的作者:
INSERT otl_streams意味着可以重用,也就是说,INSERT语句流需要至少有一个绑定变量才能“可刷新”。对于绑定变量为0的情况,存在以下内容:http://otl.sourceforge.net/otl3_const_sql.htm。
该链接中缺少所需的db.commit()调用。如果没有commit调用,表将被锁定。
问题中给出的示例的解决方案:
std::string query = "INSERT INTO common VALUES (1,2,3);";
db_.direct_exec(query.c_str());
db_.commit();https://stackoverflow.com/questions/68293208
复制相似问题