Hlavní navigace

S javou do databáze (1)

Vojtěch Patrný 24. 8. 2001

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?

2. 7. 2007 11:05

Jura (neregistrovaný)
Pozor, getString() začíná absurdně od indexu 1 - Zde začínají od 0 a to vyvolá chybu ...

30. 1. 2002 21:10

joe (neregistrovaný)

Tak jestli vite, jak funguji databaze z programovani MS ACCESU... bud jste to napsal spatne, nebo .... databaze != MS ACCESS!:)

DigiZone.cz: Česká televize mění schéma ČT :D

Česká televize mění schéma ČT :D

Vitalia.cz: „Připluly“ z Německa a možná obsahují jed

„Připluly“ z Německa a možná obsahují jed

Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

120na80.cz: Rakovina oka. Jak ji poznáte?

Rakovina oka. Jak ji poznáte?

Vitalia.cz: Říká amoleta - a myslí palačinka

Říká amoleta - a myslí palačinka

Lupa.cz: Co se dá měřit přes Internet věcí

Co se dá měřit přes Internet věcí

DigiZone.cz: ČT má dalšího zástupce v EBU

ČT má dalšího zástupce v EBU

Vitalia.cz: To není kašel! Správná diagnóza zachrání život

To není kašel! Správná diagnóza zachrání život

Podnikatel.cz: Na poslední chvíli šokuje vyjímkami v EET

Na poslední chvíli šokuje vyjímkami v EET

Lupa.cz: Proč firmy málo chrání data? Chovají se logicky

Proč firmy málo chrání data? Chovají se logicky

DigiZone.cz: NG natáčí v Praze seriál o Einsteinovi

NG natáčí v Praze seriál o Einsteinovi

Podnikatel.cz: EET: Totálně nezvládli metodologii projektu

EET: Totálně nezvládli metodologii projektu

Podnikatel.cz: 1. den EET? Problémy s pokladnami

1. den EET? Problémy s pokladnami

Lupa.cz: Není sleva jako sleva. Jak obchodům nenaletět?

Není sleva jako sleva. Jak obchodům nenaletět?

Vitalia.cz: Jsou čajové sáčky toxické?

Jsou čajové sáčky toxické?

Vitalia.cz: Chtějí si léčit kvasinky. Lék je jen v Německu

Chtějí si léčit kvasinky. Lék je jen v Německu

120na80.cz: Pánové, pečujte o svoje přirození a prostatu

Pánové, pečujte o svoje přirození a prostatu

Podnikatel.cz: Prodává přes internet. Kdy platí zdravotko?

Prodává přes internet. Kdy platí zdravotko?

Vitalia.cz: Baletky propagují zdravotní superpostel

Baletky propagují zdravotní superpostel

DigiZone.cz: Recenze Westworld: zavraždit a...

Recenze Westworld: zavraždit a...