我有一個使用OTLv4連接到數據庫的C++程序。一切工作正常。我可以將數據插入數據庫並從數據庫中讀取數據。C++ OTL沒有看到外部數據庫更改
但是,如果我從另一個程序更改數據庫中的數據,那麼這不會反映在我的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常見問題有一個關於Oracle otl_subscriber是否獲取有關數據庫更改通知的問題。你使用它來檢測外部變化? –
好主意,但這是一個MySQL數據庫,我不認爲Oracle功能適用。 – DaedalusAlpha