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&)は基本的に libpq のPQconnectdb()関数のラッパーであるため、サポートされている接続パラメーターのキーワードは 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 に答える