franta-hg@16: package cz.frantovo.sql.vyuka.dao; franta-hg@16: franta-hg@16: import cz.frantovo.sql.vyuka.dao.VyukaSuperDAO.DATABAZE; franta-hg@16: import cz.frantovo.sql.vyuka.dto.Hlaska; franta-hg@16: import cz.frantovo.sql.vyuka.dto.Hlaska.Typ; franta-hg@16: import cz.frantovo.sql.vyuka.dto.Tabulka; franta-hg@16: import cz.frantovo.sql.vyuka.dto.Uzivatel; franta-hg@16: import cz.frantovo.sql.vyuka.dto.VysledekSQL; franta-hg@16: import java.sql.Connection; franta-hg@16: import java.sql.PreparedStatement; franta-hg@16: import java.sql.ResultSet; franta-hg@16: import java.sql.SQLException; franta-hg@16: import java.util.logging.Level; franta-hg@16: franta-hg@16: /** franta-hg@16: * Pro spouštění uživatelových příkazů. franta-hg@16: * @author fiki franta-hg@16: */ franta-hg@16: public class PiskovisteDAO extends VyukaSuperDAO { franta-hg@16: franta-hg@16: TipyDAO tipy = new TipyDAO(); franta-hg@16: HistorieDAO historie = new HistorieDAO(); franta-hg@16: franta-hg@16: public VysledekSQL vykonejSQL(String sql, Uzivatel uzivatel) { franta-hg@16: VysledekSQL v = new VysledekSQL(); franta-hg@16: if (historie.ulozPrikaz(sql, uzivatel)) { franta-hg@16: franta-hg@16: Connection db = getSpojeni(DATABAZE.PISKOVISTE); franta-hg@16: if (db == null) { franta-hg@16: v.getHlasky().add(new Hlaska("Došlo k chybě spojení.", Typ.Chyba)); franta-hg@16: } else { franta-hg@16: PreparedStatement ps = null; franta-hg@16: ResultSet rs = null; franta-hg@16: try { franta-hg@16: ps = db.prepareStatement(sql); franta-hg@17: boolean isRS = ps.execute(); franta-hg@16: franta-hg@17: if (isRS) { franta-hg@17: rs = ps.getResultSet(); franta-hg@17: v.getTabulky().add(zpracujVysledek(rs)); franta-hg@16: franta-hg@17: while (ps.getMoreResults()) { franta-hg@17: rs = ps.getResultSet(); franta-hg@17: v.getTabulky().add(zpracujVysledek(rs)); franta-hg@16: } franta-hg@16: } else { franta-hg@17: /** TODO: zobrazit počet aktualizovaných? */ franta-hg@17: v.getHlasky().add(new Hlaska("SQL příkaz byl proveden, ale nevrátil žádná data.", Typ.Varovani)); franta-hg@16: } franta-hg@16: franta-hg@16: } catch (SQLException e) { franta-hg@16: log.log(Level.SEVERE, "SQL chyba při vykonávání uživatelského dotazu.", e); franta-hg@16: v.getHlasky().add(new Hlaska("Chybné SQL: " + e.getMessage(), Typ.Chyba)); franta-hg@16: } catch (Exception e) { franta-hg@16: log.log(Level.SEVERE, "Chyba při vykonávání uživatelského dotazu.", e); franta-hg@16: v.getHlasky().add(new Hlaska("Došlo k chybě dotazu.", Typ.Chyba)); franta-hg@16: } finally { franta-hg@16: zavri(db, ps, rs); franta-hg@16: } franta-hg@16: } franta-hg@16: franta-hg@16: v.getHlasky().add(new Hlaska(tipy.getTip(), Typ.Tip, false)); franta-hg@16: franta-hg@16: } else { franta-hg@16: v.getHlasky().add(new Hlaska("Došlo k chybě historie.", Typ.Chyba)); franta-hg@16: } franta-hg@16: return v; franta-hg@16: } franta-hg@17: franta-hg@17: private Tabulka zpracujVysledek(ResultSet rs) throws SQLException { franta-hg@17: Tabulka t = new Tabulka(); franta-hg@17: franta-hg@17: int pocetSloupecku = rs.getMetaData().getColumnCount(); franta-hg@17: String[] zahlavi = new String[pocetSloupecku]; franta-hg@17: t.setZahlavi(zahlavi); franta-hg@17: for (int i = 0; i < pocetSloupecku; i++) { franta-hg@17: zahlavi[i] = rs.getMetaData().getColumnName(i + 1); franta-hg@17: } franta-hg@17: franta-hg@17: while (rs.next()) { franta-hg@17: Object[] hodnoty = new Object[pocetSloupecku]; franta-hg@17: for (int i = 0; i < pocetSloupecku; i++) { franta-hg@17: hodnoty[i] = rs.getObject(i + 1); franta-hg@17: } franta-hg@17: t.getHodnoty().add(hodnoty); franta-hg@17: } franta-hg@17: franta-hg@17: return t; franta-hg@17: } franta-hg@16: }