使用libpqxx连接到Postgres数据库

时间:2011-10-14 05:44:34

标签: c++ libpqxx

我使用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"

任何人都可以帮助我吗?

由于

3 个答案:

答案 0 :(得分:9)

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 :(得分:3)

如果你这样尝试

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"

答案 2 :(得分:0)

您可能还需要在连接字符串中添加port=5432