2011-10-14 273 views
3

我正在使用libpqxx通過創建一個類來連接到postgres數據庫。使用libpqxx連接到Postgres數據庫

class databaseConnection 
{ 
public: 
    pqxx::connection* conn; 
    void SetConnection(){ 
     conn=new pqxx::connection(
      "username=temp " 
      "host=db.corral.tacc.utexas.edu " 
      "password=timelione " 
      "dbname=temp"); 

    } 

    void Disconnect(){ 
     conn->disconnect(); 
    } 

    pqxx::result query(std::string strSQL){ 
     //SetConnection(); 
     pqxx::work trans(*conn,"trans"); 

     pqxx::result res=trans.exec(strSQL); 

     trans.commit(); 
     return res; 
    } 
}; 

int main() 
{ 
    databaseConnection* pdatabase; 
    pdatabase->SetConnection(); 
    return 0; 
} 

我得到的錯誤,說

terminate called after throwing an instance of 'pqxx::broken_connection' 
what(): invalid connection option "database" 

誰能幫助我嗎?

感謝

+0

爲什麼你不使用libpq的? –

+1

@Gaurav有丹尼爾的回答對你有幫助嗎?如果是這樣,請接受它。我面臨類似的問題,如果你不接受它,我們大多數新用戶不會知道這是否是一個解決方案。畢竟,他花時間來幫助你,你應該至少感謝。 – itsols

回答

8

pgxx::connection(const PGSTD::string&)基本上是圍繞的libpq的PQconnectdb()功能的包裝,所以支持的連接的參數值是一樣的libpq的。

PostgreSQL用戶名連接的參數關鍵字爲user,而不是username。也許糾正這將解決問題。

此外,在您的示例代碼中,pdatabase是未初始化的指針。你既可以在棧上分配一個databaseConnection對象有:

databaseConnection database; 
database.SetConnection(); 

或使用new堆分配一個databaseConnection對象:

databaseConnection* pdatabase = new databaseConnection(); 
pdatabase->SetConnection(); 

但是,你需要選擇一個。

-1

您可能還需要將port=5432添加到連接字符串中。

2

如果試圖這樣

try 
{ 
    conn = new pqxx::connection(
    "username=temp " 
    "host=db.corral.tacc.utexas.edu " 
    "password=timelione " 
    "dbname=temp"); 
} 
catch (const std::exception &e) 
{ 
    std::cerr << e.what() << std::endl; 
} 

它捕獲有關連接字符串除外:

invalid connection option "username"