Jaxer: Jak na databáze v JavaScriptu

Ajaxový server Jaxer od společnosti Aptana je postavený na Firefoxu a umožňuje používání JavaScriptu i na serverové straně webových aplikací. Oproti klasickému JavaScriptu na straně klienta nabízí Jaxer další rozhraní, např. pro práci s databázemi. V dnešním článku si ukážeme, jak toto rozhraní funguje.

minulém článku jsme si platformu Jaxer přestavili, dnes se podíváme na její schopnost práce s databázemi.

Přístup k databázím funguje v Jaxeru na obdobných a osvědčených principech jako v PHP. Vzhledem ke svému mládí nabízí čisté, nově navržené rozhraní. JavaScript tomu dodává stručnost a flexibilitu. Jaxer má však prozatím užší spektrum přímo podporovaných databází, sqlite3 a MySQL. Pro ostatní databáze by bylo nutno použít ODBC.

Základní přístup k databázi

Základní přístup k databázi spočívá v klasickém výběru databáze, vytvoření připojení, vykonání příkazu a uzavření připojení. V tomto článku budu používat sqlite3, obdobně by to fungovalo pro MySQL.

var con = new Jaxer.DB.SQLite.Connection( {PATH:'/opt/jaxer/data/db.sqlite'} );
con.execute("CREATE TABLE IF NOT EXISTS story " +
    "(id INTEGER PRIMARY KEY AUTO_INCREMENT, title TEXT, content TEXT)");
var aff = con.execute("insert into story (title, content) values (?, ?)", "aa", "AA");
alert (aff);
alert (con.lastInsertId);
con.close(); 

Krátký popis

Na prvním řádku jsme vytvořili připojení k databázi pomocí třídy Jaxer.DB.SQLite.Connection. Cestu k databázovému souboru jsme zadali pomocí objektového literálu. Na druhém řádku jsme vytvořili tabulku pomocí metody execute. Primární klíč id bude autoinkrementační. V případě, že databáze ještě neexistovala, byla automaticky vytvořena. Explicitně ji lze vytvořit pomocí metody  Jaxer.DB.SQLite.createDB().

Dále jsme na připojení provedli parametrizovaný dotaz opět pomocí metody execute. Nejprve jsme zadali SQL dotaz a poté hodnoty parametrů. Hodnoty parametrů dotazu by bylo možno zadat i jako pole, což se občas hodí. Následně jsme zobrazili počet ovlivněných řádků. Vzhledem k tomu, že skript běží na serveru, je funkce alert Jaxerem předefinována. Nezobrazí se tak dialogové okno, ale hodnota se zapíše do logu. Po té jsme zobrazili hodnotu autoinkrementačního klíče (ta je umístěna na připojení, v členu lastInsertId) a na závěr jsme uzavřeli připojení.

Řízený přístup k databázi

Jaxer umožňuje vedle základního přístupu ještě tzv. předkonfiguraci neboli řízený přístup k databázi. V tom případě se název naší pracovní databáze zadá do konfiguračního souboru a náš skript už pak pouze vykonává příkazy. O připojení se stará Jaxer. Po instalaci Jaxeru je už dokonce určitá výchozí databáze zadaná. V našem případě by po předkonfiguraci stačilo napsat jediný řádek a skript by fungoval:

Jaxer.DB.execute("insert into story (title, content) values (?, ?)", "bb", "BB"); 

Resultset

Když chceme načíst data z databáze pomocí dotazu select, Jaxer nám vrátí objekt Jaxer.DB.Resultset. Nejzajímavějším členem tohoto objektu je pole rows, které obsahuje jednotlivé záznamy jako objekty JavaScriptu. V typickém scénáři pak data vrátíme ze serveru na klienta a zobrazíme je na webové stránce jako tabulku. V následujícím příkladu je pouze zapíšu do logu pomocí metody alert.

var rs = con.execute("SELECT id, title FROM story");
var rows = rs.rows;
for (var i in rows){
    alert (rows[i].id);
    alert (rows[i].title);
} 

Místo pole rows je možno použít pole rowsAsArrays, které by vrátilo jednotlivé záznamy jako vnořená pole. Resultset kromě toho obsahuje spoustu dalších členů a funkcí, které by se mohly hodit (viz referenční příručka). Mezi ty základní patří členové uvedení v následující tabulce.

Vlastnosti Resultset
Člen Poznámka
columns pole názvů sloupců
hasData boolean, zda ResultSet obsahuje data
singleRow první řádek v ResultSetu
singleResult hodnota v prvním sloupci prvního řádku

Předpřipravené dotazy

Jaxer umožňuje použít předpřipravené dotazy pro zvýšení výkonu. Pomocí nich je dotaz jedenkrát připraven a poté opakovaně používán s různými parametry. Funkcionalitu zajišťuje funkce mapExecute. Ukázku použití předvedeme následujícím příkladu. Obsahuje dotaz pro vložení záznamu, který bude připraven a celkem dvakrát použit (pole v druhém argumentu obsahuje dva prvky):

con.mapExecute("insert into story (title) values (?)", [ "dd", "ee" ]); 

Pokud budeme mít dotaz s více parametry, zadáme je v poli polí:

con.mapExecute(
    "insert into story (title, content) values (?, ?)",
    [ ["ff", "FFFF"], ["gg", "GGGG"] ]
); 

Souhrnný příklad

Pro celkový přehled jsem vytvořil souhrnný příklad. Ten obsahuje jediný skript, který poběží na serveru (skript má atribut runat=„server-nocache“). Veškerá funkcionalita se vykoná jako obsluha události window.onserverload, k níž dojde v okamžiku, kdy je připraven DOM na serveru. A na konci skriptu se zadá do DIVu tab obsah recordsetu jako HTML tabulka pomocí metody recordsetu toHTML(). Na klienta pak dorazí prostý HTML soubor s tabulkou obsahující vložená data.

Zdroje

Používáte Jaxer?

Zatím nebyl přidán žádný komentář, buďte první!

Přidat komentář
Zdroj: https://www.zdrojak.cz/?p=2984