繁体   English   中英

C ++ OTL没有看到外部数据库更改

[英]C++ OTL doesn't see external database changes

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

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

如果我注销并每次查询时都登录,那么我将获得当前值,但这似乎不是很有效。 同样,如果我从C ++程序运行查询,该查询将修改数据库,那么该程序将开始查看当前值。

在我看来,这有点像过度激进的缓存,但是我不知道它在OTL中是如何工作的,除了我可能一无所知的流池之外,再也没有提到缓存。

我什么都没做。 OTL使用以下参数进行编译:

#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

代码看起来像这样:

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();

有什么我想念的东西,需要做的一些配置吗? 关闭某种缓存? 也许我确实确实需要每次登录和注销?

我发现出了什么问题:

问:OTL:当我在MySQL的表中插入新行时,无法选择它,这是怎么回事?

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM