Подключение к базе данных Postgres с использованием libpqxx - PullRequest
5 голосов
/ 14 октября 2011

Я использую 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"

Кто-нибудь может мне помочь?

Спасибо

Ответы [ 3 ]

9 голосов
/ 14 октября 2011

pgxx::connection(const PGSTD::string&) по сути является оболочкой для функции PQconnectdb() в libpq, поэтому поддерживаемые ключевые слова параметров подключения такие же, как и для libpq.

Ключевое слово параметра для имени пользователя PostgreSQL для подключения, как user, а не username. Возможно исправление, которое решит проблему.

Кроме того, в вашем примере кода pdatabase является неинициализированным указателем. Вы можете выделить объект databaseConnection в стеке с помощью:

databaseConnection database;
database.SetConnection();

или используйте new для выделения кучи databaseConnection объекта:

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

Но вам нужно выбрать один.

3 голосов
/ 11 апреля 2014

если вы попробуете так

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 голосов
/ 12 сентября 2013

Возможно, вам также потребуется добавить port=5432 в строку подключения.

...