gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 05:35:01 25 4
gpt4 key购买 nike

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

但是,如果我从另一个程序更改数据库中的数据,那么这不会反射(reflect)在我的 C++ 程序中。例如,如果我用 MySQL Workbench 删除了一个条目,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();

有没有我遗漏的东西,我需要做一些配置?关闭某种缓存?也许我真的需要每次都登录和注销?

最佳答案

我发现了问题:

Q. OTL: When I insert a new row into a table in MySQL, I can't SELECT it, what's going on?

If you're using a prepared SELECT statement in an otl_stream, and keep executing / reusing the statement to get new rows, you need to commit (call otl_connect::commit()) after the fetch sequence is exhausted each time. The commit call will let your MySQL Server know that your current read only transaction is finished, and the server can start a new transaction, which will make newly inserted rows to be visible to your SELECT statement. In other words, you need to commit your SELECT statements in order to able to see new rows.

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

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

关于C++ OTL 看不到外部数据库更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34004449/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com