使用libpqxx连接到Postgres数据库

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

有人能帮我吗?

谢谢


1
@Gaurav,Daniel的回答是否对你有所帮助?如果是,请接受它。我也遇到了类似的问题,如果你不接受它,我们这些新用户就不会知道这是否是一个解决方案。毕竟,他花费了时间来帮助你,你应该至少表示感谢。 - itsols
3个回答

14

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();

但你需要选择一个。


6
如果你尝试像这样做。
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"

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接