author | Markus Bröker <mbroeker@largo.dyndns.tv> |
Thu, 16 Apr 2009 12:49:11 +0200 | |
changeset 39 | 46d7ec9d63bd |
parent 20 | 5fec678f931b |
child 40 | be3f5582b839 |
permissions | -rw-r--r-- |
/** * db_bridge/postgresql_db.cpp * Copyright 2008 (C) Markus Broeker */ #include <postgresql_db.h> #include <exception> #include <console.h> PostgreSQL_DB::PostgreSQL_DB (std::string srv, std::string usr, std::string pwd, std::string db) { server = srv; user = (usr != "") ? usr : getenv ("USER"); password = pwd; database = db; conninfo = "user=" + user + " dbname=" + database; if (server != "" && pwd == "") { std::cout << "Passwort von " << user << "@" << server << ": "; Console::getpass (password); conninfo += " host=" + server + " password=" + password; } } PostgreSQL_DB::~PostgreSQL_DB () { if (conn != NULL) { PQfinish (conn); std::cerr << "Datenbank wird geschlossen" << std::endl; } } bool PostgreSQL_DB::connect () { std::cerr << "Verbindungsparameter:" << " host=" << ((server != "") ? server : "LOCAL") << " user=" << user << " password=" << password << " database=" << database << std::endl; if ((conn = PQconnectdb (conninfo.c_str ())) == NULL) { std::cerr << server << ": " << "ERROR " << std::endl; return false; } return true; } Abstract_DB::DB_RESULT PostgreSQL_DB::query (std::string sql_string) { Abstract_DB::DB_ROW vec; Abstract_DB::DB_RESULT rows; PGresult *res; int i, j; int nFields, nRows; /* * send SQL query */ res = PQexec (conn, sql_string.c_str ()); nFields = PQnfields (res); nRows = PQntuples (res); std::cout << "Die Abfrage hat " << nFields << " Spalte(n) und " << nRows << " Reihe(n)." << std::endl; /* * push everything into a vector< vector<string> > */ for (i = 0; i < nRows; i++) { for (j = 0; j < nFields; j++) { vec.push_back (PQgetvalue (res, i, j)); } rows.push_back (vec); vec.clear (); } if (res != NULL) { PQclear (res); } return rows; }