Pqxx demo 1: Porovnání verzí
mBez shrnutí editace |
m tutoriál! |
||
(Není zobrazeno 11 mezilehlých verzí od stejného uživatele.) | |||
Řádek 1: | Řádek 1: | ||
[http://pqxx.org/devprojects/libpqxx/doc/development/Tutorial/ Knihovna pqxx] je oficiální C++ klientskou API knihovnou pro PostgreSQL. | |||
Následující příklad obsahuje několik elementárních funkcí pro připojení k databázi, vytvoření transakce a | Následující příklad obsahuje několik elementárních funkcí pro připojení k databázi, vytvoření transakce a zadání SQL příkazů. Parametr pro připojení knihovny <code>libpqxx</code> při sestavení programu je <code>-lpqxx</code>. | ||
V příkladu předpokládáme, že bylo vytvořeno schéma pokus (<code>CREATE SCHEMA pokus;</code>) a v něm tabulka <code>abc</code> | |||
<pre> | |||
CREATE TABLE abc ( | |||
x int, | |||
y float | |||
); | |||
</pre> | |||
V ukázce je u všech objektů knihovny explicitně uváděn jmenný prostor <code>pqxx</code>, který pochopitelně v případech jako je tento může být nahrazen direktivou <code>using namespace</code>, jak je naznačeno v úvodním komentáři hlavního bloku. | |||
Objekty <code>r1</code> a <code>r2</code> v ukázce není nutné explictině vytvářet, dále s nimi nepracujeme, a mohli bychom pro danou transakci přímo volat metodu <code>exec</code>. | |||
<pre> | <pre> | ||
#include <iostream> | #include <iostream> | ||
Řádek 43: | Řádek 55: | ||
tran.commit(); | tran.commit(); | ||
} | } | ||
catch( | catch(const pqxx::sql_error& e) | ||
{ | { | ||
std::cerr << " | std::cerr << e.what() << "\n"; | ||
} | } | ||
</pre> | </pre> | ||
[[Kategorie:Programování]] | [[Kategorie:Programování]] | ||
[[Kategorie:C++]] | |||
[[Kategorie:Databáze]] | [[Kategorie:Databáze]] |
Aktuální verze z 12. 9. 2008, 22:09
Knihovna pqxx je oficiální C++ klientskou API knihovnou pro PostgreSQL.
Následující příklad obsahuje několik elementárních funkcí pro připojení k databázi, vytvoření transakce a zadání SQL příkazů. Parametr pro připojení knihovny libpqxx
při sestavení programu je -lpqxx
.
V příkladu předpokládáme, že bylo vytvořeno schéma pokus (CREATE SCHEMA pokus;
) a v něm tabulka abc
CREATE TABLE abc ( x int, y float );
V ukázce je u všech objektů knihovny explicitně uváděn jmenný prostor pqxx
, který pochopitelně v případech jako je tento může být nahrazen direktivou using namespace
, jak je naznačeno v úvodním komentáři hlavního bloku.
Objekty r1
a r2
v ukázce není nutné explictině vytvářet, dále s nimi nepracujeme, a mohli bychom pro danou transakci přímo volat metodu exec
.
#include <iostream> #include <pqxx/pqxx> int main() try { // using namespace pqxx; // spojeni s DB "dbname=sqlquiz host=localhost user=aaa password=bbb" pqxx::connection conn("dbname=test"); // transakce pqxx::work tran(conn, "demo-transaction"); // sql prikazy pqxx::result r1(tran.exec("SET search_path TO pokus;")); pqxx::result r2(tran.exec("INSERT into abc (x, y) " " SELECT coalesce(max(x),0)+1, random() FROM abc ;")); pqxx::result r3(tran.exec("SELECT * FROM abc;")); // pruchod vyslednou tabulkou if (r3.empty()) std::cout << "tabulka je prazdna\n"; else std::cout << "tabulka ma " << r3.columns() << " sloupce a " << r3.size() << " radku\n\n"; for (pqxx::result::const_iterator i=r3.begin(); i!=r3.end(); ++i) { // sloupce muzeme adresovat absolutne nebo jmenem std::cout << "x = " << i[0].as(std::string()) << " " << "y = " << i["y"].as(double()) << std::endl; } // commit transakce, neni nutny pokud pracujeme pouze se selekty tran.commit(); } catch(const pqxx::sql_error& e) { std::cerr << e.what() << "\n"; }