首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++ OTL看不到外部数据库更改

C++ OTL看不到外部数据库更改
EN

Stack Overflow用户
提问于 2015-12-01 01:28:44
回答 1查看 402关注 0票数 1

我有一个使用OTLv4连接到数据库的C++程序。一切都很正常。我既可以将数据插入到数据库中,也可以从数据库中读取数据。

但是,如果我从另一个程序更改数据库中的数据,那么这不会反映在我的C++程序中。例如,如果我使用MySQL工作台删除一个条目,C++程序仍然会看到该条目。我看到的数据是程序第一次登录数据库时出现的数据。

如果我每次执行查询时都注销并登录,那么我将获得当前值,但这似乎效率不高。类似地,如果我从将修改数据库的C++程序中运行一个查询,那么该程序将开始查看该点之前的当前值。

对我来说,这感觉像是某种过于激进的缓存,但我不知道这在OTL中是如何工作的,除了可能对我一无所知的流池之外,我没有看到任何关于缓存的提及。

我没做什么花哨的事。OTL是用以下参数编译的:

代码语言:javascript
复制
#define OTL_ODBC // Compile OTL 4.0/ODBC
#define OTL_UNICODE // Compile OTL with Unicode 
#define OTL_UNICODE_EXCEPTION_AND_RLOGON
#define OTL_UNICODE_STRING_TYPE std::wstring
// The following #define is required with MyODBC 3.51.11 and higher
#define OTL_ODBC_SELECT_STM_EXECUTE_BEFORE_DESCRIBE

代码看起来像这样:

代码语言:javascript
复制
otl_connect::otl_initialize(1); // Multithreading
otl_connect database;
database.rlogon(...);

// Make queries with otl_stream and direct_exec
otl_stream stream(50, "select * from ...", database);
database.direct_exec("insert ... into ...", otl_exception::disabled);

database.logoff();

是不是我遗漏了什么,我需要做什么配置?关闭某种缓存?也许我真的每次都需要登录和注销?

EN

回答 1

Stack Overflow用户

发布于 2015-12-01 18:29:10

我发现了问题所在:

Q.OTL:当我在MySQL中插入一个新行到表中时,我不能选择它,这是怎么回事?

如果在otl_stream中使用准备好的SELECT语句,并且一直执行/重用该语句以获取新行,则需要在每次提取序列耗尽后提交(调用otl_connect::commit())。commit调用将让您的MySQL服务器知道您当前的只读事务已经完成,并且服务器可以启动一个新的事务,这将使新插入的行对您的SELECT语句可见。换句话说,您需要提交SELECT语句才能看到新行。

来自http://otl.sourceforge.net/otl3_faq.htm

所以问题是,每当我执行SELECT语句时,我必须调用otl_connect::commit();,否则MySQL将无法理解该语句已经结束。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34004449

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档