6

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

谁能帮我吗?

谢谢

4

3 回答 3

14

pgxx::connection(const PGSTD::string&)基本上是对 libpqPQconnectdb()函数的封装,因此支持的连接参数关键字与 libpq 相同。

PostgreSQL 用户名的参数关键字按原样连接user,而不是username。也许纠正它会解决问题。

此外,在您的示例代码中,pdatabase是一个未初始化的指针。您可以使用以下方法databaseConnection在堆栈上分配一个对象:

databaseConnection database;
database.SetConnection();

或用于new堆分配databaseConnection对象:

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

但是你需要选择一个。

于 2011-10-14T14:44:41.940 回答
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"
于 2014-04-11T19:20:17.363 回答
0

您可能还需要添加port=5432到您的连接字符串。

于 2013-09-11T23:17:49.627 回答