Podpora vícenásobných výsledkových sad (více dotazů oddělených středníkem). Omezení zobrazované historie na 20 posledních.
1 package cz.frantovo.sql.vyuka.dao;
3 import cz.frantovo.sql.vyuka.dao.VyukaSuperDAO.DATABAZE;
4 import cz.frantovo.sql.vyuka.dto.Hlaska;
5 import cz.frantovo.sql.vyuka.dto.Hlaska.Typ;
6 import cz.frantovo.sql.vyuka.dto.Tabulka;
7 import cz.frantovo.sql.vyuka.dto.Uzivatel;
8 import cz.frantovo.sql.vyuka.dto.VysledekSQL;
9 import java.sql.Connection;
10 import java.sql.PreparedStatement;
11 import java.sql.ResultSet;
12 import java.sql.SQLException;
13 import java.util.logging.Level;
16 * Pro spouštění uživatelových příkazů.
19 public class PiskovisteDAO extends VyukaSuperDAO {
21 TipyDAO tipy = new TipyDAO();
22 HistorieDAO historie = new HistorieDAO();
24 public VysledekSQL vykonejSQL(String sql, Uzivatel uzivatel) {
25 VysledekSQL v = new VysledekSQL();
26 if (historie.ulozPrikaz(sql, uzivatel)) {
28 Connection db = getSpojeni(DATABAZE.PISKOVISTE);
30 v.getHlasky().add(new Hlaska("Došlo k chybě spojení.", Typ.Chyba));
32 PreparedStatement ps = null;
35 ps = db.prepareStatement(sql);
36 boolean isRS = ps.execute();
39 rs = ps.getResultSet();
40 v.getTabulky().add(zpracujVysledek(rs));
42 while (ps.getMoreResults()) {
43 rs = ps.getResultSet();
44 v.getTabulky().add(zpracujVysledek(rs));
47 /** TODO: zobrazit počet aktualizovaných? */
48 v.getHlasky().add(new Hlaska("SQL příkaz byl proveden, ale nevrátil žádná data.", Typ.Varovani));
51 } catch (SQLException e) {
52 log.log(Level.SEVERE, "SQL chyba při vykonávání uživatelského dotazu.", e);
53 v.getHlasky().add(new Hlaska("Chybné SQL: " + e.getMessage(), Typ.Chyba));
54 } catch (Exception e) {
55 log.log(Level.SEVERE, "Chyba při vykonávání uživatelského dotazu.", e);
56 v.getHlasky().add(new Hlaska("Došlo k chybě dotazu.", Typ.Chyba));
62 v.getHlasky().add(new Hlaska(tipy.getTip(), Typ.Tip, false));
65 v.getHlasky().add(new Hlaska("Došlo k chybě historie.", Typ.Chyba));
70 private Tabulka zpracujVysledek(ResultSet rs) throws SQLException {
71 Tabulka t = new Tabulka();
73 int pocetSloupecku = rs.getMetaData().getColumnCount();
74 String[] zahlavi = new String[pocetSloupecku];
75 t.setZahlavi(zahlavi);
76 for (int i = 0; i < pocetSloupecku; i++) {
77 zahlavi[i] = rs.getMetaData().getColumnName(i + 1);
81 Object[] hodnoty = new Object[pocetSloupecku];
82 for (int i = 0; i < pocetSloupecku; i++) {
83 hodnoty[i] = rs.getObject(i + 1);
85 t.getHodnoty().add(hodnoty);