Hlavní navigace

S javou do databáze (2)

Vojtěch Patrný

Minule jsme si ukázali, jak se připojit do databáze z Javy. Používali jsme čisté java.sql nebo ConnBean. Dnes se zaměříme na ConnCacheBean a DbBean, také z projektu DbBeans, které naši práci výrazně zjednodušují.

Příklady

Příklady generují naši známou tabulku z prvního dílu, a to pomocí ConnCacheBean a DbBean. Druhý příklad generuje XML z databáze.

ConnCacheBean

ConnCacheBean je složitější než ConnBean, zato však umožňuje poolování připojení do databáze a jednoduchý dohled nad nimi.

Hlavní výhodou poolování připojení do databáze je, že pool vytvoří několik připojení (u ConnCacheBean standardně pět), které potom pružně přiděluje klientům. V našem případě jednomu klientovi, kterým je tomcat. Odpadá nutost neustálého vytváření nových připojení, čímž odlehčíte databázi. Pět připojení je dost pro malé až střední weby. Základní myšlenkou poolování je tedy několik připojení pro více klientů.

Používání poolu s sebou přináší jiný způsob programování přístupů do databáze – dříve(ConnBean) jste se připojili, uložili připojení do session a dále se o něj nestarali.

<jsp:useBean id="cbean" class="patrny.sql.ConnBean" scope="session">
    <jsp:setProperty name="cbean" property="driver"
    value="org.gjt.mm.mysql.Driver"/>
    <jsp:setProperty name="cbean" property="URL" value="jdbc:
    mysql://localhost/employee?useUnicode=true&characterEncoding=
    iso-8859-2"/>
    <jsp:setProperty name="cbean" property="user" value="user"/>
    <jsp:setProperty name="cbean" property="password" value="password"/>
</jsp:useBean>
<%
java.sql.Connection conn = cBean.getConnection();
...

/* Můžete připojení vesele používat.
 *
 * Jen ho nezavíráte, zavře se samo, až vyprší session.
 */
%>

Tady si před každým voláním databáze vyžádáte připojení, pool vám ho vrátí, vy provedete operaci v databázi a připojení zavřete. Tím se ale připojení nezavře, pouze se vrátí do poolu, kde je dále k dispozici.

<jsp:useBean id="ccbean" class="patrny.sql.ConnCacheBean"
scope="application">
    <jsp:setProperty name="ccbean" property="driver"
    value="org.gjt.mm.mysql.Driver"/>
    <jsp:setProperty name="ccbean" property="URL" value="jdbc:
    mysql://localhost/employee?useUnicode=true&characterEncoding=
    iso-8859-2"/>
    <jsp:setProperty name="ccbean" property="user" value="user"/>
    <jsp:setProperty name="ccbean" property="password" value="password"/>
</jsp:useBean>
<%
java.sql.Connection conn = ccBean.getConnection();
...

/* Můžete připojení vesele používat.
 *
 * Jakmile jste skončili s připojením, měli byste ho zavřít,
 * aby bylo k dispozici dalším.
 * A to i tehdy, budete-li ho v této stránce ještě potřebovat
 * - jednoduše si ho poté znovu vyžádáte.
 */

conn.close();
...
%>

Příklad z minulého dílu, převedený na ConnCacheBean a DbBean, je tady.

Rozdíly mezi ConnBean a ConnCacheBean

Tabulka č. 186
Rozdíl ConnBean ConnCacheBean
Scope, do kterého se umisťuje Session. Je k dispozici pouze jednomu klientovi. Application. Je k dispozici všem klientům.
Způsob práce s připojením Připojení se nezavírá, zavře se samo. Připojení je nutné navřít pokaždé, když jsme dokončili blok sql operací.
Velikost webu Hodí se pouze pro menší weby. Hodí se spíše pro střední weby, je větší než ConnBean.
Nevýhody Session vyprší po poměrně dlouhé době – hromadění připojení. Všechna připojení se musí zavřít, jinak se pool vyprázdní a nebude možné s ním pracovat.

DbBean

DbBean je jednoduchoučký javabean, který se nestará o připojení, ale ulehčuje práci se získáváním dat z databáze. Data může vrátit jako HTML tabulku, nebo jako XML.

HTML tabulku vrací pomocí funkce getResultAsHTMLTa­ble(ResultSet rs), vrátí pouze tělo tabulky(tedy <tr> a <td>), hlavičku si musíte dopsat sami. Tyto funkce jsou použity v předchozím příkladu s ConnCacheBean.

XML vrací funkce getResultAsXML(ja­va.sql.ResultSet rs, String encoding, String rowName), kde rowName je název řádků.

<jsp:useBean id="ccbean" class="patrny.sql.ConnCacheBean"
scope="application">
    <jsp:setProperty name="ccbean" property="driver"
    value="org.gjt.mm.mysql.Driver"/>
    <jsp:setProperty name="ccbean" property="URL" value="jdbc:
    mysql://localhost/test?useUnicode=true&characterEncoding=iso-8859-2"/>
    <jsp:setProperty name="ccbean" property="user" value="user"/>
    <jsp:setProperty name="ccbean" property="password" value="password"/>
</jsp:useBean>
<%-- DbBean se používá ve scope page, tzn. nijak se nesdílí a po
vygenerování stránky se zruší --%>
<jsp:useBean id="dbbean" class="patrny.sql.DbBean" scope="page"/>

<% /* Vyžádá si připojení z poolu */
Connection conn = ccbean.getConnection();
%>

<%-- Získá ResultSet z metody executeQuery a potom vygeneruje XML
tabulku. --%>
<%= dbbean.getResultAsXML(dbbean.executeQuery("SELECT * FROM
employee ORDER BY id", conn), "iso-8859-2", "zamestnanec")%>

<% /* Vrátí připojení do poolu. */
conn.close();
%>

Kompletní příklad je tady.

Tímto končí náš miniseriál o připojování se z Javy do databáze. Měli byste mít základní představu o tom, jak zacházet s databází v Javě. Pro další studium je ideální java.sun.com. Opensource DbBeans nabízí více, než jsme tady společně prošli, podívejte se na javadoc, který je součástí programu.

Našli jste v článku chybu?