# HG changeset patch # User František Kučera # Date 1243561475 -7200 # Node ID 9acb74ac7346d789ca50692aa77738596af0b497 # Parent 8632e60378433bc3b29f1b5eba96836e93225cae Databázová vrstva: vykonávání příkazů a ukládání a načítání historie. diff -r 8632e6037843 -r 9acb74ac7346 java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/ajax/Ajax.java --- a/java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/ajax/Ajax.java Fri May 29 02:04:27 2009 +0200 +++ b/java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/ajax/Ajax.java Fri May 29 03:44:35 2009 +0200 @@ -1,8 +1,7 @@ package cz.frantovo.sql.vyuka.ajax; -import cz.frantovo.sql.vyuka.dto.Hlaska; -import cz.frantovo.sql.vyuka.dto.Hlaska.Typ; -import cz.frantovo.sql.vyuka.dto.Tabulka; +import cz.frantovo.sql.vyuka.dao.HistorieDAO; +import cz.frantovo.sql.vyuka.dao.PiskovisteDAO; import cz.frantovo.sql.vyuka.dto.Uzivatel; import cz.frantovo.sql.vyuka.dto.VysledekSQL; @@ -16,24 +15,8 @@ * @return Historie SQL příkazů daného uživatele. */ public String getHistorie(Uzivatel uzivatel) { - VysledekSQL v = new VysledekSQL(); - v.getHlasky().add(new Hlaska("Bude vypsána vaše historie", Typ.OK)); - v.getHlasky().add(new Hlaska("idSezení: " + uzivatel.getIdSezeni(), Typ.OK)); - v.getHlasky().add(new Hlaska("Ale ještě to není hotové.", Typ.Varovani)); - v.getHlasky().add(new Hlaska("Což je asi chyba.", Typ.Chyba)); - v.getHlasky().add(new Hlaska("Stejně vám něco doporučíme.", Typ.Tip, false)); - - - Tabulka t = new Tabulka(); - String[] zahlavi = {"Kdy", "SQL příkaz"}; - t.setZahlavi(zahlavi); - for (int i = 1; i < 4; i++) { - String[] hodnoty = {"Někdy " + i, "SELECT * FROM tabulka WHERE id = " + i}; - t.getHodnoty().add(hodnoty); - } - v.getTabulky().add(t); - - + HistorieDAO h = new HistorieDAO(); + VysledekSQL v = h.nactiHistorii(uzivatel); return v.getHtml(); } @@ -42,27 +25,8 @@ * @return Výsledek dotazu – tabulka, hláška nebo chyba. */ public String geSQLVysledek(String sql, Uzivatel uzivatel) { - VysledekSQL v = new VysledekSQL(); - v.getHlasky().add(new Hlaska("Bude vykonán SQL dotaz.", Typ.OK)); - v.getHlasky().add(new Hlaska("idSezení: " + uzivatel.getIdSezeni(), Typ.OK)); - v.getHlasky().add(new Hlaska("SQL: " + sql, Typ.OK)); - v.getHlasky().add(new Hlaska("IP adresa: " + uzivatel.getIpAdresa(), Typ.OK)); - v.getHlasky().add(new Hlaska("IP adresa a SQL dotaz budou uloženy", Typ.Varovani)); - v.getHlasky().add(new Hlaska("Ale ještě to není hotové.", Typ.Varovani)); - v.getHlasky().add(new Hlaska("Což je asi chyba.", Typ.Chyba)); - v.getHlasky().add(new Hlaska("Stejně vám něco doporučíme.", Typ.Tip, false)); - - for (int n = 1; n < 3; n++) { - Tabulka t = new Tabulka(); - String[] zahlavi = {"Sloupeček 1", "Nějaké číslo"}; - t.setZahlavi(zahlavi); - for (int i = 1; i < 4; i++) { - Object[] hodnoty = {"počet " + i, new Integer(i * n)}; - t.getHodnoty().add(hodnoty); - } - v.getTabulky().add(t); - } - + PiskovisteDAO p = new PiskovisteDAO(); + VysledekSQL v = p.vykonejSQL(sql, uzivatel); return v.getHtml(); } } diff -r 8632e6037843 -r 9acb74ac7346 java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dao/HistorieDAO.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dao/HistorieDAO.java Fri May 29 03:44:35 2009 +0200 @@ -0,0 +1,100 @@ +package cz.frantovo.sql.vyuka.dao; + +import cz.frantovo.sql.vyuka.dto.Hlaska; +import cz.frantovo.sql.vyuka.dto.Hlaska.Typ; +import cz.frantovo.sql.vyuka.dto.Tabulka; +import cz.frantovo.sql.vyuka.dto.Uzivatel; +import cz.frantovo.sql.vyuka.dto.VysledekSQL; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.Timestamp; +import java.util.logging.Level; + +/** + * Ukládání a načítání uživatelské historie. + * @author fiki + */ +public class HistorieDAO extends VyukaSuperDAO { + + TipyDAO tipy = new TipyDAO(); + + private enum SQL { + + NACTI, + ULOZ + } + + /** + * @param sql uživatelský SQL příkaz k uložení + * @param uzivatel idSezení a IP adresa uživatele + * @return zda se podařilo historii uložit + */ + public boolean ulozPrikaz(String sql, Uzivatel uzivatel) { + Connection db = getSpojeni(DATABAZE.APLIKACE); + if (db == null) { + return false; + } else { + PreparedStatement ps = null; + ResultSet rs = null; + try { + ps = db.prepareStatement(getSQL(SQL.ULOZ)); + ps.setString(1, sql); + ps.setString(2, uzivatel.getIdSezeni()); + ps.setString(3, uzivatel.getIpAdresa()); + ps.executeUpdate(); + return true; + } catch (Exception e) { + log.log(Level.SEVERE, "Chyba při ukládání historie.", e); + return false; + } finally { + zavri(db, ps, rs); + } + } + } + + public VysledekSQL nactiHistorii(Uzivatel uzivatel) { + VysledekSQL v = new VysledekSQL(); + + + Tabulka t = new Tabulka(); + String[] zahlavi = {"Kdy", "SQL příkaz"}; + t.setZahlavi(zahlavi); + + + Connection db = getSpojeni(DATABAZE.APLIKACE); + if (db == null) { + v.getHlasky().add(new Hlaska("Došlo k chybě spojení.", Typ.Chyba)); + } else { + PreparedStatement ps = null; + ResultSet rs = null; + try { + ps = db.prepareStatement(getSQL(SQL.NACTI)); + ps.setString(1, uzivatel.getIdSezeni()); + rs = ps.executeQuery(); + + while (rs.next()) { + Timestamp datum = rs.getTimestamp("datum"); + String sql = rs.getString("sql"); + Object[] hodnoty = {datum, sql}; + t.getHodnoty().add(hodnoty); + } + + if (t.getHodnoty().size() < 1) { + v.getHlasky().add(new Hlaska("Historie SQL příkazů nenalezena.", Typ.Varovani)); + } else { + v.getTabulky().add(t); + } + + } catch (Exception e) { + log.log(Level.SEVERE, "Chyba při ukládání historie.", e); + v.getHlasky().add(new Hlaska("Došlo k chybě dotazu.", Typ.Chyba)); + } finally { + zavri(db, ps, rs); + } + } + + v.getHlasky().add(new Hlaska(tipy.getTip(), Typ.Tip, false)); + return v; + } +} diff -r 8632e6037843 -r 9acb74ac7346 java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dao/HistorieDAO.sql.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dao/HistorieDAO.sql.xml Fri May 29 03:44:35 2009 +0200 @@ -0,0 +1,14 @@ + + + + + + + + + + \ No newline at end of file diff -r 8632e6037843 -r 9acb74ac7346 java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dao/PiskovisteDAO.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dao/PiskovisteDAO.java Fri May 29 03:44:35 2009 +0200 @@ -0,0 +1,91 @@ +package cz.frantovo.sql.vyuka.dao; + +import cz.frantovo.sql.vyuka.dao.VyukaSuperDAO.DATABAZE; +import cz.frantovo.sql.vyuka.dto.Hlaska; +import cz.frantovo.sql.vyuka.dto.Hlaska.Typ; +import cz.frantovo.sql.vyuka.dto.Tabulka; +import cz.frantovo.sql.vyuka.dto.Uzivatel; +import cz.frantovo.sql.vyuka.dto.VysledekSQL; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.logging.Level; + +/** + * Pro spouštění uživatelových příkazů. + * @author fiki + */ +public class PiskovisteDAO extends VyukaSuperDAO { + + TipyDAO tipy = new TipyDAO(); + HistorieDAO historie = new HistorieDAO(); + + public VysledekSQL vykonejSQL(String sql, Uzivatel uzivatel) { + VysledekSQL v = new VysledekSQL(); + if (historie.ulozPrikaz(sql, uzivatel)) { + + + + + + + Tabulka t = new Tabulka(); + + + + Connection db = getSpojeni(DATABAZE.PISKOVISTE); + if (db == null) { + v.getHlasky().add(new Hlaska("Došlo k chybě spojení.", Typ.Chyba)); + } else { + PreparedStatement ps = null; + ResultSet rs = null; + try { + ps = db.prepareStatement(sql); + rs = ps.executeQuery(); + + int pocetSloupecku = rs.getMetaData().getColumnCount(); + String[] zahlavi = new String[pocetSloupecku]; + t.setZahlavi(zahlavi); + for (int i = 0; i < pocetSloupecku; i++) { + zahlavi[i] = rs.getMetaData().getColumnName(i + 1); + } + + while (rs.next()) { + Object[] hodnoty = new Object[pocetSloupecku]; + for (int i = 0; i < pocetSloupecku; i++) { + hodnoty[i] = rs.getObject(i + 1); + } + t.getHodnoty().add(hodnoty); + } + + if (t.getHodnoty().size() > 0 && pocetSloupecku > 0) { + + v.getTabulky().add(t); + } else { + v.getHlasky().add(new Hlaska("SQL příkaz byl proveden.", Typ.OK)); + } + + } catch (SQLException e) { + log.log(Level.SEVERE, "SQL chyba při vykonávání uživatelského dotazu.", e); + v.getHlasky().add(new Hlaska("Chybné SQL: " + e.getMessage(), Typ.Chyba)); + } catch (Exception e) { + log.log(Level.SEVERE, "Chyba při vykonávání uživatelského dotazu.", e); + v.getHlasky().add(new Hlaska("Došlo k chybě dotazu.", Typ.Chyba)); + } finally { + zavri(db, ps, rs); + } + } + + v.getHlasky().add(new Hlaska(tipy.getTip(), Typ.Tip, false)); + + + + + + } else { + v.getHlasky().add(new Hlaska("Došlo k chybě historie.", Typ.Chyba)); + } + return v; + } +} diff -r 8632e6037843 -r 9acb74ac7346 java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dao/TipyDAO.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dao/TipyDAO.java Fri May 29 03:44:35 2009 +0200 @@ -0,0 +1,13 @@ +package cz.frantovo.sql.vyuka.dao; + +/** + * + * @author fiki + */ +public class TipyDAO extends VyukaSuperDAO { + + public String getTip() { + /** TODO: Tipy brát z databáze. */ + return "Stejně vám něco doporučíme."; + } +} diff -r 8632e6037843 -r 9acb74ac7346 java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dao/VyukaSuperDAO.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dao/VyukaSuperDAO.java Fri May 29 03:44:35 2009 +0200 @@ -0,0 +1,57 @@ +package cz.frantovo.sql.vyuka.dao; + +import cz.frantovo.superDAO.SuperDAO; +import java.sql.Connection; +import java.sql.SQLException; +import java.util.logging.Level; +import javax.naming.InitialContext; +import javax.naming.NamingException; +import javax.sql.DataSource; + +/** + * + * @author fiki + */ +public class VyukaSuperDAO extends SuperDAO { + + protected InitialContext kontext = null; + + protected enum DATABAZE { + + /** Databáze aplikace – historie, nastavení. */ + APLIKACE, + /** Databáze, na které se spouštějí příkazy uživatelů. */ + PISKOVISTE + } + + public VyukaSuperDAO() { + try { + kontext = new InitialContext(); + } catch (NamingException ex) { + log.log(Level.SEVERE, "Chyba při inicializaci kontextu", ex); + } + } + + /** + * @param databaze Která databáze (aplikace = historie a nastavení | pískoviště = příkazy uživatele) + * @return Databázové spojení + */ + protected Connection getSpojeni(DATABAZE databaze) { + if (databaze == null) { + databaze = DATABAZE.PISKOVISTE; + } + log.log(Level.SEVERE, "DATABAZE:" + String.valueOf(databaze)); + String jndi = orizniJNDI(getVlastnost(databaze, VyukaSuperDAO.class)); + DataSource zdroj = null; + try { + zdroj = (DataSource) kontext.lookup(jndi); + return zdroj.getConnection(); + } catch (NamingException ex) { + log.log(Level.SEVERE, "getSpojeni: lookup", ex); + return null; + } catch (SQLException ex) { + log.log(Level.SEVERE, "getSpojeni: sql", ex); + return null; + } + } +} \ No newline at end of file diff -r 8632e6037843 -r 9acb74ac7346 java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dao/VyukaSuperDAO.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dao/VyukaSuperDAO.xml Fri May 29 03:44:35 2009 +0200 @@ -0,0 +1,6 @@ + + + + jdbc/sqlVyuka/aplikace + jdbc/sqlVyuka/piskoviste + \ No newline at end of file diff -r 8632e6037843 -r 9acb74ac7346 java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dto/Tabulka.java --- a/java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dto/Tabulka.java Fri May 29 02:04:27 2009 +0200 +++ b/java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dto/Tabulka.java Fri May 29 03:44:35 2009 +0200 @@ -70,8 +70,4 @@ public Collection getHodnoty() { return hodnoty; } - - public void setHodnoty(Collection hodnoty) { - this.hodnoty = hodnoty; - } }