Ahoj, odpovídám na zprávu z úterka, 21. února 2006, kterou Michal Palička napsal(a) v 10:07:13:
Ty DB Utils dělají pomoci takovéhoto vnoření až to zavírání. Já to hodlám dělat takto: QueryRunner qr = new QueryRunner(DataConn.getDataSource()); List rv = (List)qr.query("SELECT name,value FROM data",new ArrayListHandler()); A dostanu výsledek rovnou jako pole nebo QueryRunner qr = new QueryRunner(DataConn.getDataSource()); qr.batch(sql,data); a importuju do Databáze x nových řádků --------------------------- Původní zpráva --------------------------- Odesilatel: Michal Palička <[EMAIL PROTECTED]> Předmět: DataConnection pooling in Tomcat Datum: 21. února 2006, 10:07:13 (GMT +0100) Přílohy: <none> msgid:[EMAIL PROTECTED] M> Dobry den, M> ten ukazkovy kod vypada teda dost brutalne. M> Mne se osvedcilo pouziti vnorenych try-finally bloku. M> Myslim, ze je to prehlednejsi a elegantnejsi. M> Priklad: M> void myMethod() throws SQLexception { M> Connection con = ds.getConnection(); M> try { M> Statement st = con.createStatement(); M> try { M> ResultSet rs = st.executeQuery(); M> try { M> ... // zpracovani dat z 'rs' M> } finally { M> rs.close(); M> } M> } finally { M> st.close(); M> } M> } finally { M> con.close(); M> } M> } M> Vyse uvedeny kod predpoklada, ze objekt (con, st, rs) je bud vytvoren M> uspesne anebo je vyhozena vyjimka (tj. nenastane situace, ze napr. metoda M> ds.getConnection() sice skonci bez vyjimky, avsak vrati <null>). M> To by u JDBC melo platit. M> Osetreni vyhozene vyjimky (SQLException) muzete resit bud v metode volajici M> anebo cele telo metody myMethod obalit jeste jednim blokem (try-catch). M> Pokud takovych metod budete mit vice, budou se v podstate lisit jenom kodem M> v tom nejvnitrnejsim bloku. Opakujici se kod by se asi dal dale eliminovat. M> ("template method" pattern, "command" pattern). M> mp. M> -----Original Message----- M> From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Tomáš Procházka M> Sent: Sunday, February 19, 2006 1:08 PM M> To: konference@java.cz M> Subject: DataConnection pooling in Tomcat M> Zdravím. M> Na stránce: M> http://tomcat.apache.org/tomcat-5.0-doc/jndi-datasource-examples-howto.html M> je ukázka doporučeného kódu pro práci s Connection v kontejneru Tomcatu a musím říct, M> že je to poměrně složitý postup (viz konec příspěvku). M> Chtěl bych použít něco, co to zjednoduší, přemýšlel jsem o Jakrta Commons - DBUtils, jenže je tam jedna věc, které se bojím. M> V té doporučené ukázce zavírají Connection na konco výkonného bloku a pak ještě ve finally bloku. M> Jaký je rozdíl mezi: M> try { M> conn.close() M> } finnaly { M> conn.close() M> } M> a M> try { M> M> } finnaly { M> conn.close() M> } M> Tedy když se vynechá to uzavření ve výkonné části? Nebude pak docházet k vyčerpání zdrojů? M> DBUtills veškeré uzavírání provádí právě až ve finnaly bloku. M> Nebo existuje nějaké lepší řešení než DBUtils? Mě se tohle líbí právě pro svou M> jednoduchost, nepotřebuji na to 10 MB knihoven. M> Ukázka doporučeného použiti Connection v Tomcat kontejner: M> Connection conn = null; M> Statement stmt = null; // Or PreparedStatement if needed M> ResultSet rs = null; M> try { M> conn = ... get connection from connection pool ... M> stmt = conn.createStatement("select ..."); M> rs = stmt.executeQuery(); M> ... iterate through the result set ... M> rs.close(); M> rs = null; M> stmt.close(); M> stmt = null; M> conn.close(); // Return to connection pool M> conn = null; // Make sure we don't close it twice M> } catch (SQLException e) { M> ... deal with errors ... M> } finally { M> // Always make sure result sets and statements are closed, M> // and the connection is returned to the pool M> if (rs != null) { M> try { rs.close(); } catch (SQLException e) { ; } M> rs = null; M> } M> if (stmt != null) { M> try { stmt.close(); } catch (SQLException e) { ; } M> stmt = null; M> } M> if (conn != null) { M> try { conn.close(); } catch (SQLException e) { ; } M> conn = null; M> } M> } M> M> M> Datum: 12:59:44 19. února 2006 M> -- M> --------------------------------------------------------------------- M> Tomáš Procházka M> E-mail: [EMAIL PROTECTED] M> WWW: http://atom.sf.cz M> ICQ: 87147320 M> --------------------------------------------------------------------- ------------------------ Konec původní zprávy ------------------------ -- --------------------------------------------------------------------- Tomáš Procházka E-mail: [EMAIL PROTECTED] WWW: http://atom.sf.cz ICQ: 87147320 ---------------------------------------------------------------------