2014-10-01 68 views
2

我通過libpqxx實例化PostgreSQL連接。我查詢數據庫並獲得正確的響應。之後,我嘗試了下面的錯誤情況:在創建了pqxx :: connection的實例之後,我暫停了我的程序,手動從Linux的命令行程序中終止了Postgre的連接過程並恢復程序。它繼續下去,直到它試圖創建新的事務pqxx :: work,並拋出pqxx :: broken_connection。我處理這個異常,並嘗試重新連接到pqxx :: connection :: activate()的調用,但另一個pqxx :: broken_connection被拋出。如何在不實例化另一個pqxx :: connection的情況下重新連接到數據庫?libpqxx:如何在連接過程終止後重新連接到Postgresql數據庫

P.S.重新激活不受抑制。我使用標準連接類型 -

namespace pqxx 
{ 
    typedef basic_connection<connect_direct> connection; 
} 

回答

1

好吧,沒有人回答。我注意到,在我連續幾次調用pqxx :: connection :: activate後,手動終止連接後的進程後,它會重新連接,所以這是我的解決方法。

class dbconnection : public pqxx::connection 
{ 
public: 
    dbconnection(std::string options) : pqxx::connection(options) { }; 

    void reconnect() 
    { 
     static int times = 0; 
     try 
     { 
      times++; 
      if(!this->is_open()) 
      { 
       this->activate(); 
      } 
      times = 0; 
     } 
     catch(const pqxx::broken_connection & e) 
     { 
      if(times > 10) 
      { 
       times = 0; 
       return; 
      } 
      this->reconnect(); 
     } 
    }; 
}; 

我在每次捕獲pqxx :: broken_connection後調用dbconnection :: reconnect。讓我知道你有更好的解決方案嗎?