簡體   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