我目前正在嘗試在我的C++應用程序中使用事務,但我遇到了ODBC自動提交模式的問題。C++ Poco ODBC事務 - 自動提交模式
我正在使用POCO庫在同一臺機器上創建到PostgreSQL數據庫的連接。目前,我可以將數據作爲單個語句發送到此數據庫,但我無法弄清楚如何使用Poco的事務庫來更快地發送此數據。
因爲我有幾千條記錄要插入,所以繼續使用單插入語句非常慢並且不切實際 - 所以我嘗試使用Poco的事務來加速這一點(一點點)。
我遇到的錯誤是一個理論上簡單的一個 - 波科拋出以下錯誤:
'Invalid access: Session is in auto commit mode.'
我明白了,因爲這樣的結果,我應該以某種方式設置爲「自動提交」假 - 因爲它只允許我逐行將數據提交到數據庫,而不是作爲單個事務。
問題是我如何設置它。
目前,我有Session.h創建一個會話,看起來很多這樣的:
session = new Poco::Data::Session(
"ODBC",
connection_data.str()
);
如果連接數據是一個簡單的字符串流與登錄信息,密碼,數據庫,服務器和「驅動程序= {PostgreSQL ANSI};「告訴ODBC使用PostgreSQL的驅動程序。
我試過只是通過會話的setFeature或setProperty設置設置屬性「autocommit」爲false,當然這是無濟於事。 (這一點更像是一次溝渠嘗試)。
session->setFeature("AUTOCOMMIT", false);
環顧四周,我直接從ODBC /會話創建ODBC sessionImpl/SessionImpl.h,而不是用上面這個通用方法,然後從創建這個新的會話對象看到了一種可能的替代方法。
這樣做的好處是,ODBC的sessionImpl參考了自動提交模式在頭,這將表明這將是能夠處理這個問題:
void autoCommit(const std::string&, bool val);
/// Sets autocommit property for the session.
然而,之前已經不習慣sessionImpl,我不能garuntee如果這能起作用,或者如果可以的話,可以使用有限的文檔。
我使用C++ 03(不11),與Visual Studio 2015年 波科1.7.5 提升(如果需要)
Would any one know the correct way of setting this feature (above) or a alternative method to achieving this?
是的,我可以叫會話級>()開始,但它也將引發「:會話處於自動提交模式下無效的訪問。」以及。 - canTransact()的結果是1,我試着用這個來防止session-> begin()。 – Chris
對不起,沒有得到你的問題。我想你也已經嘗試過使用Poco Transaction類嗎? – erg
你是對的,我也嘗試創建一個Poco事務類。我目前正在嘗試直接創建一個ODBC SessionImpl對象,並嘗試以這種方式繞過它。 – Chris