使用libpqxx连接到Postgres数据库

Gau*_*rav 6 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;
}
Run Code Online (Sandbox Code Playgroud)

我收到错误的说法

terminate called after throwing an instance of 'pqxx::broken_connection' 
what(): invalid connection option "database"
Run Code Online (Sandbox Code Playgroud)

谁能帮我吗?

谢谢

Dan*_*ien 10

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

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

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

databaseConnection database;
database.SetConnection();
Run Code Online (Sandbox Code Playgroud)

或者用于new堆分配databaseConnection对象:

databaseConnection* pdatabase = new databaseConnection();
pdatabase->SetConnection();
Run Code Online (Sandbox Code Playgroud)

但你需要选一个.


yet*_*yet 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;
}
Run Code Online (Sandbox Code Playgroud)

它捕获有关连接字符串的异常:

invalid connection option "username"
Run Code Online (Sandbox Code Playgroud)