Pqxx demo 1: Porovnání verzí

Z GeoWikiCZ
m (Nová stránka: <pre> #include <iostream> #include <pqxx/pqxx> int main() try { // using namespace pqxx; // spojeni s DB "dbname=sqlquiz host=localhost user=aaa password=bbb" pqxx::connec...)
 
m (tutoriál!)
 
(Není zobrazeno 12 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 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 39: Řádek 55:
   tran.commit();
   tran.commit();
}
}
catch(...)
catch(const pqxx::sql_error& e)
{
{
   std::cerr << "demo : exception ...\n";
   std::cerr << e.what() << "\n";
}
}
</pre>
</pre>
[[Kategorie:Programování]]
[[Kategorie:C++]]
[[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";
}