2011-10-14 274 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"