Pqxx demo 1: Porovnání verzí
mBez shrnutí editace |
mBez shrnutí editace |
||
| Řádek 1: | Řádek 1: | ||
Knihovna [http://pqxx.org/ pqxx] je oficiální C++ klientskou API knihovnou pro PostgreSQL. | Knihovna [http://pqxx.org/ 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 <code>libpqxx</code> při sestavení programu je <code>-lpqxx</code> | 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> | 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> | ||
| Řádek 14: | Řádek 14: | ||
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. | 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> | ||
Verze z 12. 9. 2008, 16:35
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(...)
{
std::cerr << "demo : exception ...\n";
}