Hlavní navigace

S javou do databáze (1)

Vojtěch Patrný

Rád bych navázal na předchozí články "S javou na webovém serveru" a doplnil je o připojování do databáze MySQL, ale neměl by být problém použít kteroukoli jinou z jsp pomocí jdbc. Také se podíváme na opensource DbBeans.

Co potřebujeme za software

  • Tomcat nebo jiný servlet container – viz články S javou na webovém serveru.
  • Databázi – my budeme používat opensource MySQL, která běží jak na linuxu, tak i na windows.
  • JDBC ovladač k databázi – pro MySQL se nachází tady. Pokud hledáte ovladač pro jinou databázi, podívejte se na java.sun.com.

Co byste už měli umět

  • JSP – viz články S javou na webovém serveru. Je ale jasné, že se zatím pouze učíte, žádný strach, jste cílové obecenstvo.
  • SQL – stačí základní příkazy.

Ukázkový program

Naše aplikace bude úplně jednoduchá a bude pouze generovat seznam zaměstnanců z databáze, což není vůbec originální, ale pro naše účely to postačuje.

Takhle vypadá naše tabulka v databázi:

Tabulka č. 181
id firstname lastname email
0 Jan Novák jan.novak@firma.cz
1 Aleš Borůvka ales.boruvka@firma.cz
2 Petr Mladý petr.mlady@firma.cz
3 Peter Palfy peter.palfy@spolupracovnik.sk

SQL kód pro vytvoření tabulky a naplnění daty je tady.

Ještě ale musíte nainstalovat váš jdbc driver do tomcatu. Překopírujte jar do adresáře TOMCAT_HOME/lib. Dále byste do tohoto adresáře měli nakopírovat také soubor dbbeans.jar, který rozbalíte z dbbeans.zip.

Připojení pomocí čisté java.sql
Část, která se připojuje k databázi a generuje stránku:

<%
/* Natáhneme driver do paměti.
Volat newInstance() se sice oficiálne nemusí,
ale vyřeší to rozdíly mezi jvm.
*/
Class.forName("org.gjt.mm.mysql.Driver").newInstance();

/* Získáme připojení k databázi.
getConnection(URL, uživatel, heslo);

URL:
jdbc:mysql - protokol
localhost - server
test - databáze
useUnicode - mm.mysql jdbc driver základně nepoužívá
unicode, což se nám nehodí, musíme ho zapnout.
characterEncoding - kódování dat(windowsáci použijte windows-1250)
*/
Connection conn = DriverManager.getConnection("jdbc:mysql://
localhost/test?useUnicode=true&characterEncoding=iso-8859-2",
"user", "password");

/* Statement je objekt, který nám umožňuje odesílat sql
příkaz na server a získávat odpoveď. */
Statement stmt = conn.createStatement();

/* Odeslání SELECT příkazu na server, vrací ResultSet,
což je vlastně speciální tabulka dat. Pokud je sql příkaz
UPDATE, INSERT nebo DELETE, použijte metodu executeUpdate,
vrací int. Metoda execute se dá použít pro obojí. */
ResultSet rs = stmt.executeQuery("SELECT * FROM employee
ORDER BY id");

/* Generování tabulky */
while(rs.next()) { %>
<tr><td><%= rs.getString(0) %></td><td><%=
rs.getString(1) %></td>
<td><%= rs.getString(2) %></td><td><%=
rs.getString(3) %></td></tr><%="\n"%>
<% }

/* Uzavřeme všechny objekty, které jsme vytvořili. */
rs.close();
stmt.close();
conn.close();
%>

Celá jsp stránka je k dispozici zde.

Připojení pomocí ConnBean
ConnBean je součástí opensource projektu DbBeans a snaží o dvě věci:

1) Zjednodušit práci s objektem Connection. Protože je ConnBean javabean (nezávislý program), zvyšuje přehlednost jsp stránek a je přenositelný (dá se použít v mnoha projektech bez úprav).

2) Šetřit váš server před neustálým připojováním. ConnBean pracuje na myšlence jedno připojení jednoho k databázi na jednoho návštěvníka stránek. Připojení pracuje po celou dobu session (než se zavolá invalidate()), nebo až do doby kdy zavřete Connection (pokud například návštěvník opustí dynamicky generovanou oblast).

Část, která se připojuje k databázi a generuje stránku:

<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>
<%
/* Statement je objekt, který nám umožňuje odesílat sql
příkaz na server a získávat odpověď. */
Statement stmt = cbean.getConnection().createStatement();

/* Odeslání SELECT příkazu na server, vrací ResultSet což
je vlastně tabulka dat. Pokud je sql příkaz UPDATE, INSERT
nebo DELETE, použijte metodu executeUpdate, vrací int.
Metoda execute se dá použít pro obojí. */
ResultSet rs = stmt.executeQuery("SELECT * FROM employee
ORDER BY id");

/* Generování tabulky */
while(rs.next()) { %>
<tr><td><%= rs.getString(0) %></td><td><%=
rs.getString(1) %></td>
<td><%= rs.getString(2) %></td><td><%=
rs.getString(3) %></td></tr><%="\n"%>
<% }

/* Uzavřeme všechny objekty, které jsme vytvořili.
Ale neuzavíráme Connection, protože se zavře samo, až
vyprší platnost session. */
rs.close();
stmt.close();
%>

Celá jsp stránka je k dispozici zde.

Příště
Příště se podíváme na ConnCacheBean, která doplňuje ConnBean o povolování připojení k databázi, a na DbBean, která usnadňuje práci s generováním dat.

Našli jste v článku chybu?