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:
id | firstname | lastname | |
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.