Index: java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dao/TipyDAO.java
===================================================================
--- java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dao/TipyDAO.java	(revision 16:9acb74ac7346)
+++ java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dao/TipyDAO.java	(revision 29:4b6ab4ba1a95)
@@ -1,13 +1,43 @@
 package cz.frantovo.sql.vyuka.dao;
 
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.util.logging.Level;
+
 /**
- *
+ * Rady, tipy, odkazy, citáty… pro zobrazování uživatelům.
  * @author fiki
  */
 public class TipyDAO extends VyukaSuperDAO {
 
+    private enum SQL {
+
+        NAHODNY_TIP
+    }
+
+    /**
+     * @return Náhodný tip načtený z databáze
+     */
     public String getTip() {
-        /** TODO: Tipy brát z databáze. */
-        return "Stejně vám něco <a href=\"http://frantovo.cz/blog/\">doporučíme</a>.";
+        Connection db = getSpojeni(DATABAZE.APLIKACE);
+        if (db == null) {
+            log.log(Level.SEVERE, "Databáze je null.");
+            return null;
+        } else {
+            PreparedStatement ps = null;
+            ResultSet rs = null;
+            try {
+                ps = db.prepareStatement(getSQL(SQL.NAHODNY_TIP));
+                rs = ps.executeQuery();
+                rs.next();
+                return rs.getString("text");
+            } catch (Exception e) {
+                log.log(Level.SEVERE, "Chyba při hledání náhodného tipu.", e);
+                return null;
+            } finally {
+                zavri(db, ps, rs);
+            }
+        }
     }
 }
Index: java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dao/TipyDAO.sql.xml
===================================================================
--- java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dao/TipyDAO.sql.xml	(revision 29:4b6ab4ba1a95)
+++ java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dao/TipyDAO.sql.xml	(revision 29:4b6ab4ba1a95)
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+<properties>
+    <entry key="NAHODNY_TIP">
+        <![CDATA[
+        SELECT  *
+        FROM tip
+        ORDER BY random()
+        LIMIT 1;
+        ]]>
+    </entry>
+</properties>
Index: java/sql-vyuka/web/ajax.jspx
===================================================================
--- java/sql-vyuka/web/ajax.jspx	(revision 28:6facd99aa189)
+++ java/sql-vyuka/web/ajax.jspx	(revision 29:4b6ab4ba1a95)
@@ -15,6 +15,7 @@
 
     <c:choose>
-        <!-- Akce: Historie a vykonání SQL příkazu -->
+        <!-- <Akce: Historie a vykonání SQL příkazu> -->
         <c:when test="${param.akce == 'historie' || param.akce == 'vykonat'}">
+            <!-- <Načteme výsledek z beany>  -->
             <c:choose>
                 <c:when test="${param.akce == 'historie'}">
@@ -26,6 +27,7 @@
                 </c:when>
             </c:choose>
+            <!-- </Načteme výsledek z beany>  -->
 
-            <!-- Tabulky -->
+            <!-- <Tabulky> -->
             <c:forEach var="tabulka" items="${vysledek.tabulky}">
                 <!-- <lokalizace> -->
@@ -63,4 +65,5 @@
                                             <td>
                                                 <fmt:formatDate value="${bunka}" pattern="dd.MM.yyyy HH:mm:ss"/>
+                                                <!-- uvnitř vzoru je nedělitelná mezera -->
                                             </td>
                                         </c:when>
@@ -88,6 +91,7 @@
                 </table>
             </c:forEach>
+            <!-- </Tabulky> -->
 
-            <!-- Hlášky -->
+            <!-- <Hlášky> -->
             <c:forEach var="hlaska" items="${vysledek.hlasky}">
                 <p class="vysledek${hlaska.typ}">
@@ -95,10 +99,14 @@
                 </p>
             </c:forEach>
+            <!-- </Hlášky> -->
         </c:when>
+        <!-- </Akce: Historie a vykonání SQL příkazu> -->
 
-        <!-- Akce: Nápověda -->
+
+        <!-- <Akce: Nápověda> -->
         <c:when test="${param.akce == 'napoveda'}">
             <p>TODO: nápověda.</p>
         </c:when>
+        <!-- </Akce: Nápověda> -->
     </c:choose>
 </jsp:root>
Index: sql/schéma.sql
===================================================================
--- sql/schéma.sql	(revision 29:4b6ab4ba1a95)
+++ sql/schéma.sql	(revision 29:4b6ab4ba1a95)
@@ -0,0 +1,133 @@
+--
+-- PostgreSQL database dump
+--
+
+-- Started on 2009-05-31 22:35:00 CEST
+
+SET client_encoding = 'UTF8';
+SET standard_conforming_strings = off;
+SET check_function_bodies = false;
+SET client_min_messages = warning;
+SET escape_string_warning = off;
+
+--
+-- TOC entry 10 (class 2615 OID 16788)
+-- Name: sqlvyukaaplikace; Type: SCHEMA; Schema: -; Owner: -
+--
+
+CREATE SCHEMA sqlvyukaaplikace;
+
+
+SET search_path = sqlvyukaaplikace, pg_catalog;
+
+--
+-- TOC entry 1579 (class 1259 OID 16797)
+-- Dependencies: 10
+-- Name: historie_seq; Type: SEQUENCE; Schema: sqlvyukaaplikace; Owner: -
+--
+
+CREATE SEQUENCE historie_seq
+    INCREMENT BY 1
+    NO MAXVALUE
+    NO MINVALUE
+    CACHE 1;
+
+
+SET default_tablespace = '';
+
+SET default_with_oids = false;
+
+--
+-- TOC entry 1578 (class 1259 OID 16789)
+-- Dependencies: 1848 1849 10
+-- Name: historie; Type: TABLE; Schema: sqlvyukaaplikace; Owner: -; Tablespace: 
+--
+
+CREATE TABLE historie (
+    id numeric DEFAULT nextval('historie_seq'::regclass) NOT NULL,
+    datum timestamp with time zone DEFAULT now(),
+    sql text,
+    id_sezeni character varying(255),
+    ip_adresa character varying(255)
+);
+
+
+--
+-- TOC entry 1580 (class 1259 OID 16813)
+-- Dependencies: 10
+-- Name: tip_seq; Type: SEQUENCE; Schema: sqlvyukaaplikace; Owner: -
+--
+
+CREATE SEQUENCE tip_seq
+    INCREMENT BY 1
+    NO MAXVALUE
+    NO MINVALUE
+    CACHE 1;
+
+
+--
+-- TOC entry 1581 (class 1259 OID 16815)
+-- Dependencies: 1850 10
+-- Name: tip; Type: TABLE; Schema: sqlvyukaaplikace; Owner: -; Tablespace: 
+--
+
+CREATE TABLE tip (
+    id numeric DEFAULT nextval('tip_seq'::regclass) NOT NULL,
+    text character varying(512) NOT NULL
+);
+
+
+--
+-- TOC entry 1859 (class 0 OID 0)
+-- Dependencies: 1581
+-- Name: TABLE tip; Type: COMMENT; Schema: sqlvyukaaplikace; Owner: -
+--
+
+COMMENT ON TABLE tip IS 'Rady, tipy, odkazy a citáty… které budeme zobrazovat uživateli v náhodném pořadí.';
+
+
+--
+-- TOC entry 1860 (class 0 OID 0)
+-- Dependencies: 1581
+-- Name: COLUMN tip.text; Type: COMMENT; Schema: sqlvyukaaplikace; Owner: -
+--
+
+COMMENT ON COLUMN tip.text IS 'HTML text. Bude vložen do <p>odstavce</p>. → Pozor na validitu.';
+
+
+--
+-- TOC entry 1852 (class 2606 OID 16796)
+-- Dependencies: 1578 1578
+-- Name: historie_pk; Type: CONSTRAINT; Schema: sqlvyukaaplikace; Owner: -; Tablespace: 
+--
+
+ALTER TABLE ONLY historie
+    ADD CONSTRAINT historie_pk PRIMARY KEY (id);
+
+
+--
+-- TOC entry 1854 (class 2606 OID 16823)
+-- Dependencies: 1581 1581
+-- Name: tip_pk; Type: CONSTRAINT; Schema: sqlvyukaaplikace; Owner: -; Tablespace: 
+--
+
+ALTER TABLE ONLY tip
+    ADD CONSTRAINT tip_pk PRIMARY KEY (id);
+
+
+--
+-- TOC entry 1856 (class 2606 OID 16825)
+-- Dependencies: 1581 1581
+-- Name: tip_uq; Type: CONSTRAINT; Schema: sqlvyukaaplikace; Owner: -; Tablespace: 
+--
+
+ALTER TABLE ONLY tip
+    ADD CONSTRAINT tip_uq UNIQUE (text);
+
+
+-- Completed on 2009-05-31 22:35:01 CEST
+
+--
+-- PostgreSQL database dump complete
+--
+
