DAO vrstva a načítání seznamu podniků z databáze.
authorFrantišek Kučera <franta-hg@frantovo.cz>
Wed, 27 Jan 2010 01:28:52 +0100
changeset 23f76fc9f3cb7c
parent 22 b215d5297a31
child 24 58aa900334e4
DAO vrstva a načítání seznamu podniků z databáze.
java/nekurak.net-web/src/java/cz/frantovo/nekurak/dao/PodnikDAO.java
java/nekurak.net-web/src/java/cz/frantovo/nekurak/dao/PodnikDAO.sql.xml
java/nekurak.net-web/src/java/cz/frantovo/nekurak/web/PodnikyWeb.java
java/nekurak.net-web/src/java/cz/frantovo/superDAO/SuperDAO.java
java/nekurak.net-web/web/index.jsp
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/java/nekurak.net-web/src/java/cz/frantovo/nekurak/dao/PodnikDAO.java	Wed Jan 27 01:28:52 2010 +0100
     1.3 @@ -0,0 +1,85 @@
     1.4 +package cz.frantovo.nekurak.dao;
     1.5 +
     1.6 +import cz.frantovo.nekurak.dto.Podnik;
     1.7 +import java.sql.Connection;
     1.8 +import java.sql.PreparedStatement;
     1.9 +import java.sql.ResultSet;
    1.10 +import java.util.ArrayList;
    1.11 +import java.util.Collection;
    1.12 +import java.util.logging.Level;
    1.13 +
    1.14 +/**
    1.15 + * Stará se o načítání a ukládání podniků (hospod) z a do databáze.
    1.16 + * @author fiki
    1.17 + */
    1.18 +public class PodnikDAO extends NekurakSuperDAO {
    1.19 +
    1.20 +    private enum SQL {
    1.21 +
    1.22 +	SELECT_VSECHNY,
    1.23 +	INSERT,
    1.24 +	UPDATE,
    1.25 +	NEXTVAL
    1.26 +    }
    1.27 +
    1.28 +    public Collection<Podnik> getPodniky() {
    1.29 +	Connection db = getSpojeni();
    1.30 +	PreparedStatement ps = null;
    1.31 +	ResultSet rs = null;
    1.32 +	try {
    1.33 +	    ps = db.prepareStatement(getSQL(SQL.SELECT_VSECHNY));
    1.34 +	    rs = ps.executeQuery();
    1.35 +	    Collection<Podnik> vysledek = new ArrayList<Podnik>();
    1.36 +
    1.37 +	    while (rs.next()) {
    1.38 +		vysledek.add(new Podnik(rs.getInt("id"), rs.getString("nazev")));
    1.39 +	    }
    1.40 +
    1.41 +	    return vysledek;
    1.42 +	} catch (Exception e) {
    1.43 +	    log.log(Level.SEVERE, "Chyba při získávání podniků.", e);
    1.44 +	    return null;
    1.45 +	} finally {
    1.46 +	    zavri(db, ps, rs);
    1.47 +	}
    1.48 +    }
    1.49 +
    1.50 +    /**
    1.51 +     * Uloží podnik do databáze.
    1.52 +     * @param p Podnik k uložení. Pokud má být vložen nový, má id = 0.
    1.53 +     * @return id vloženého nebo uloženého podniku.
    1.54 +     */
    1.55 +    public int ulozPodnik(Podnik p) {
    1.56 +	Connection db = getSpojeni();
    1.57 +	PreparedStatement psUpdate = null;
    1.58 +	PreparedStatement psId = null;
    1.59 +	ResultSet rsId = null;
    1.60 +	try {
    1.61 +	    if (p.getId() == 0) {
    1.62 +		psId = db.prepareStatement(getSQL(SQL.NEXTVAL));
    1.63 +		rsId = psId.executeQuery();
    1.64 +		rsId.next();
    1.65 +		p.setId(rsId.getInt(1));
    1.66 +
    1.67 +		psUpdate = db.prepareStatement(getSQL(SQL.INSERT));
    1.68 +	    } else {
    1.69 +		psUpdate = db.prepareStatement(getSQL(SQL.UPDATE));
    1.70 +	    }
    1.71 +
    1.72 +	    psUpdate.setString(1, p.getNazev());
    1.73 +	    psUpdate.setInt(2, p.getId());
    1.74 +
    1.75 +	    psUpdate.executeUpdate();
    1.76 +
    1.77 +	    db.commit();
    1.78 +	    return p.getId();
    1.79 +	} catch (Exception e) {
    1.80 +	    rollback(db);
    1.81 +	    log.log(Level.SEVERE, "Chyba při ukládání podniku.", e);
    1.82 +	    return -1;
    1.83 +	} finally {
    1.84 +	    zavri(null, psId, rsId);
    1.85 +	    zavri(db, psUpdate, null);
    1.86 +	}
    1.87 +    }
    1.88 +}
     2.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     2.2 +++ b/java/nekurak.net-web/src/java/cz/frantovo/nekurak/dao/PodnikDAO.sql.xml	Wed Jan 27 01:28:52 2010 +0100
     2.3 @@ -0,0 +1,27 @@
     2.4 +<?xml version="1.0" encoding="UTF-8"?>
     2.5 +<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
     2.6 +<properties>
     2.7 +    <entry key="SELECT_VSECHNY">
     2.8 +	<![CDATA[
     2.9 +	SELECT * FROM podnik;
    2.10 +	]]>
    2.11 +    </entry>
    2.12 +    <entry key="INSERT">
    2.13 +	<![CDATA[
    2.14 +	INSERT INTO podnik (nazev, id)
    2.15 +	VALUES (?, ?);
    2.16 +	]]>
    2.17 +    </entry>
    2.18 +    <entry key="UPDATE">
    2.19 +	<![CDATA[
    2.20 +	UPDATE podnik
    2.21 +	SET nazev = ?
    2.22 +	WHERE id = ?
    2.23 +	]]>
    2.24 +    </entry>
    2.25 +    <entry key="NEXTVAL">
    2.26 +	<![CDATA[
    2.27 +	SELECT nextval('podnik_seq');
    2.28 +	]]>
    2.29 +    </entry>
    2.30 +</properties>
    2.31 \ No newline at end of file
     3.1 --- a/java/nekurak.net-web/src/java/cz/frantovo/nekurak/web/PodnikyWeb.java	Tue Jan 26 20:35:40 2010 +0100
     3.2 +++ b/java/nekurak.net-web/src/java/cz/frantovo/nekurak/web/PodnikyWeb.java	Wed Jan 27 01:28:52 2010 +0100
     3.3 @@ -1,8 +1,8 @@
     3.4  package cz.frantovo.nekurak.web;
     3.5  
     3.6 +import cz.frantovo.nekurak.dao.PodnikDAO;
     3.7  import cz.frantovo.nekurak.dto.Podnik;
     3.8  import java.io.Serializable;
     3.9 -import java.util.ArrayList;
    3.10  import java.util.Collection;
    3.11  
    3.12  /**
    3.13 @@ -11,14 +11,9 @@
    3.14   */
    3.15  public class PodnikyWeb implements Serializable {
    3.16  
    3.17 +    private PodnikDAO dao = new PodnikDAO();
    3.18 +
    3.19      public Collection<Podnik> getPodniky() {
    3.20 -	ArrayList<Podnik> vysledek = new ArrayList<Podnik>();
    3.21 -
    3.22 -	vysledek.add(new Podnik(1, "Na Kovárně"));
    3.23 -	vysledek.add(new Podnik(2, "U Přátelského potkana"));
    3.24 -	vysledek.add(new Podnik(3, "Na Růžku"));
    3.25 -
    3.26 -	return vysledek;
    3.27 +	return dao.getPodniky();
    3.28      }
    3.29 -
    3.30  }
     4.1 --- a/java/nekurak.net-web/src/java/cz/frantovo/superDAO/SuperDAO.java	Tue Jan 26 20:35:40 2010 +0100
     4.2 +++ b/java/nekurak.net-web/src/java/cz/frantovo/superDAO/SuperDAO.java	Wed Jan 27 01:28:52 2010 +0100
     4.3 @@ -3,6 +3,7 @@
     4.4  import java.io.InputStream;
     4.5  import java.sql.Connection;
     4.6  import java.sql.ResultSet;
     4.7 +import java.sql.SQLException;
     4.8  import java.sql.Statement;
     4.9  import java.util.Collections;
    4.10  import java.util.HashMap;
    4.11 @@ -23,7 +24,7 @@
    4.12  
    4.13      private enum VLASTNOSTI {
    4.14  
    4.15 -        AHOJ
    4.16 +	AHOJ
    4.17      }
    4.18  
    4.19      /**
    4.20 @@ -37,14 +38,14 @@
    4.21       * @return SQL dotaz nebo null v případě chyby
    4.22       */
    4.23      protected String getSQL(Enum klic, Class trida) {
    4.24 -        return getHodnota(sql, "sql.xml", klic, trida);
    4.25 +	return getHodnota(sql, "sql.xml", klic, trida);
    4.26      }
    4.27  
    4.28      /**
    4.29       * @see getSQL(Enum klic, Class trida)
    4.30       */
    4.31      protected String getSQL(Enum klic) {
    4.32 -        return getSQL(klic, null);
    4.33 +	return getSQL(klic, null);
    4.34      }
    4.35  
    4.36      /**
    4.37 @@ -58,14 +59,14 @@
    4.38       * @return textová hodnota nebo null v případě chyby
    4.39       */
    4.40      protected String getVlastnost(Enum klic, Class trida) {
    4.41 -        return getHodnota(vlastnosti, "xml", klic, trida);
    4.42 +	return getHodnota(vlastnosti, "xml", klic, trida);
    4.43      }
    4.44  
    4.45      /**
    4.46       * @see getVlastnost(Enum klic, Class trida)
    4.47       */
    4.48      protected String getVlastnost(Enum klic) {
    4.49 -        return getVlastnost(klic, null);
    4.50 +	return getVlastnost(klic, null);
    4.51      }
    4.52  
    4.53      /**
    4.54 @@ -75,21 +76,21 @@
    4.55       */
    4.56      private String getHodnota(Map<Class, Properties> mezipamet, String pripona, Enum klic, Class trida) {
    4.57  
    4.58 -        if (trida == null) {
    4.59 -            trida = getClass();
    4.60 -        }
    4.61 +	if (trida == null) {
    4.62 +	    trida = getClass();
    4.63 +	}
    4.64  
    4.65 -        if (mezipamet.get(trida) == null) {
    4.66 -            /** Ještě nemáme načteno ze souboru */
    4.67 -            mezipamet.put(trida, getHodnoty(pripona, trida));
    4.68 +	if (mezipamet.get(trida) == null) {
    4.69 +	    /** Ještě nemáme načteno ze souboru */
    4.70 +	    mezipamet.put(trida, getHodnoty(pripona, trida));
    4.71  
    4.72 -            if (mezipamet.get(trida) == null) {
    4.73 -                /** Došlo k chybě --> už to příště nebudeme zkoušet načítat */
    4.74 -                mezipamet.put(trida, new Properties());
    4.75 -            }
    4.76 -        }
    4.77 +	    if (mezipamet.get(trida) == null) {
    4.78 +		/** Došlo k chybě --> už to příště nebudeme zkoušet načítat */
    4.79 +		mezipamet.put(trida, new Properties());
    4.80 +	    }
    4.81 +	}
    4.82  
    4.83 -        return mezipamet.get(trida).getProperty(klic.toString());
    4.84 +	return mezipamet.get(trida).getProperty(klic.toString());
    4.85      }
    4.86  
    4.87      /**
    4.88 @@ -97,7 +98,7 @@
    4.89       * @param args prázdné
    4.90       */
    4.91      public static void main(String[] args) {
    4.92 -        System.out.println(new SuperDAO().getSQL(VLASTNOSTI.AHOJ));
    4.93 +	System.out.println(new SuperDAO().getSQL(VLASTNOSTI.AHOJ));
    4.94      }
    4.95  
    4.96      /**
    4.97 @@ -107,17 +108,29 @@
    4.98       * @return načtené vlastnosti nebo null v případě chyby
    4.99       */
   4.100      private Properties getHodnoty(String pripona, Class trida) {
   4.101 -        String soubor = trida.getSimpleName() + "." + pripona;
   4.102 +	String soubor = trida.getSimpleName() + "." + pripona;
   4.103  
   4.104 -        try {
   4.105 -            Properties hodnoty = new Properties();
   4.106 -            InputStream fis = trida.getResourceAsStream(soubor);
   4.107 -            hodnoty.loadFromXML(fis);
   4.108 -            return hodnoty;
   4.109 -        } catch (Exception e) {
   4.110 -            log.log(Level.SEVERE, "Chyba při načítání vlastností: " + soubor, e);
   4.111 -            return null;
   4.112 -        }
   4.113 +	try {
   4.114 +	    Properties hodnoty = new Properties();
   4.115 +	    InputStream fis = trida.getResourceAsStream(soubor);
   4.116 +	    hodnoty.loadFromXML(fis);
   4.117 +	    return hodnoty;
   4.118 +	} catch (Exception e) {
   4.119 +	    log.log(Level.SEVERE, "Chyba při načítání vlastností: " + soubor, e);
   4.120 +	    return null;
   4.121 +	}
   4.122 +    }
   4.123 +
   4.124 +    /**
   4.125 +     * Pokusí se zrušit transakci.
   4.126 +     * @param spojeni databázové spojení.
   4.127 +     */
   4.128 +    protected void rollback(Connection spojeni) {
   4.129 +	try {
   4.130 +	    spojeni.rollback();
   4.131 +	} catch (SQLException e) {
   4.132 +	    log.log(Level.FINEST, "rollback se nezdařil", e);
   4.133 +	}
   4.134      }
   4.135  
   4.136      /**
   4.137 @@ -127,24 +140,24 @@
   4.138       * @param vysledek DB výsledek
   4.139       */
   4.140      protected static void zavri(Connection spojeni, Statement prikaz, ResultSet vysledek) {
   4.141 -        if (vysledek != null) {
   4.142 -            try {
   4.143 -                vysledek.close();
   4.144 -            } catch (Exception e) {
   4.145 -            }
   4.146 -        }
   4.147 -        if (prikaz != null) {
   4.148 -            try {
   4.149 -                prikaz.close();
   4.150 -            } catch (Exception e) {
   4.151 -            }
   4.152 -        }
   4.153 -        if (spojeni != null) {
   4.154 -            try {
   4.155 -                spojeni.close();
   4.156 -            } catch (Exception e) {
   4.157 -            }
   4.158 -        }
   4.159 +	if (vysledek != null) {
   4.160 +	    try {
   4.161 +		vysledek.close();
   4.162 +	    } catch (Exception e) {
   4.163 +	    }
   4.164 +	}
   4.165 +	if (prikaz != null) {
   4.166 +	    try {
   4.167 +		prikaz.close();
   4.168 +	    } catch (Exception e) {
   4.169 +	    }
   4.170 +	}
   4.171 +	if (spojeni != null) {
   4.172 +	    try {
   4.173 +		spojeni.close();
   4.174 +	    } catch (Exception e) {
   4.175 +	    }
   4.176 +	}
   4.177      }
   4.178  
   4.179      /**
   4.180 @@ -154,10 +167,10 @@
   4.181       * @return Text s oříznutými bílými znany nazačátku a nakonci.
   4.182       */
   4.183      public static String orizni(String text) {
   4.184 -        if (text == null) {
   4.185 -            return null;
   4.186 -        } else {
   4.187 -            return text.trim();
   4.188 -        }
   4.189 +	if (text == null) {
   4.190 +	    return null;
   4.191 +	} else {
   4.192 +	    return text.trim();
   4.193 +	}
   4.194      }
   4.195 -}
   4.196 \ No newline at end of file
   4.197 +}
     5.1 --- a/java/nekurak.net-web/web/index.jsp	Tue Jan 26 20:35:40 2010 +0100
     5.2 +++ b/java/nekurak.net-web/web/index.jsp	Wed Jan 27 01:28:52 2010 +0100
     5.3 @@ -13,7 +13,7 @@
     5.4  	</head>
     5.5  	<body>
     5.6  	    <h1>Nekuřák.net</h1>
     5.7 -	    <p>Začínáme s J2EE…</p>
     5.8 +	    <p>Načítáme údaje z databáze.</p>
     5.9  
    5.10  
    5.11  	    <!-- jednoduchá podmínka -->