Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Connection to Postgres Database using libpqxx

Tags:

c++

libpqxx

I am using libpqxx to connect to a postgres database by creating a class.

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;
}

I am getting error that says

terminate called after throwing an instance of 'pqxx::broken_connection' 
what(): invalid connection option "database"

Can anyone help me out?

Thanks

like image 744
Gaurav Avatar asked Oct 14 '11 05:10

Gaurav


2 Answers

pgxx::connection(const PGSTD::string&) is basically a wrapper around libpq's PQconnectdb() function, so the supported connection parameter keywords are the same as for libpq.

The parameter key word for the PostgreSQL user name to connect as is user, not username. Perhaps correcting that will fix the problem.

Also, in your sample code, pdatabase is an uninitialized pointer. You could either allocate a databaseConnection object on the stack with:

databaseConnection database;
database.SetConnection();

or use new to heap-allocate a databaseConnection object:

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

But you need to pick one.

like image 121
Daniel Trebbien Avatar answered Oct 06 '22 06:10

Daniel Trebbien


if you try like this

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;
}

it catches the exception about connection string:

invalid connection option "username"
like image 45
yet Avatar answered Oct 06 '22 05:10

yet