diff -r 8ce7c1ad5fde -r bc821c6d090c java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dao/PiskovisteDAO.java --- a/java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dao/PiskovisteDAO.java Fri Jun 12 19:51:10 2009 +0200 +++ b/java/sql-vyuka/src/java/cz/frantovo/sql/vyuka/dao/PiskovisteDAO.java Sat Jul 18 17:16:41 2009 +0200 @@ -54,10 +54,22 @@ v.getTabulky().add(zpracujVysledek(rs)); } - /** TODO: ošetřit případ, kdy vykonáme dva příkazy bez výsledkové sady a třetí příkaz ji už má (teď se nezobrazí výsledná tabulka). */ - while (ps.getMoreResults()) { + /** + * Ošetříme případ, kdy uživatel zadá SQL příkaz, který nevrací výsledkovou sadu. + * Typicky nastavení výchozího schématu: SET search_path = '…'; + * pokud bude pocetPokusu = 0 a první dotaz nevrátí výsledkovou sadu, + * procházení se ukončí a uživatel neuvidí žádnou tabulku (i když další příkazy už výsledkové sady vracely). + * Poznámka: jeden „SET search_path = '…'“ se obvykle předřazuje uživatelskému SQL (viz PiskovisteDAO.xml). + */ + int pocetPokusuBezRS = 1; + while (ps.getMoreResults() || pocetPokusuBezRS > 0) { + pocetPokusuBezRS--; rs = ps.getResultSet(); - v.getTabulky().add(zpracujVysledek(rs)); + if (rs == null) { + /** Jedná se buď o „update count“ nebo tu už žádná další výsledková sada není. */ + } else { + v.getTabulky().add(zpracujVysledek(rs)); + } } long dobaProvadeni = System.currentTimeMillis() - casPred;