Refactor
:my
=>
'code'
Codes
Refactorings
Popular
Best
Submit
Spam
Account
Logout
Login
JavaScript doesn't seem to be activated, expect things to be ugly and sloppy!
More Jobs
Recent
Arrays, loops, strings...
Similar virtual attributes and their getters/setter
Check type is XML Serializable
Serena Collage slideshow
Shortest regular expression for matching a subdomain.
Caching Methods
Tab-Switching in jQuery
Apache log file sorting
How to find max, min of three numbers?
repeated code in rspec model test
Popular
Caching Methods
How to find max, min of three numbers?
Similar virtual attributes and their getters/setter
Arrays, loops, strings...
Shortest regular expression for matching a subdomain.
Check type is XML Serializable
Apache log file sorting
Tab-Switching in jQuery
Serena Collage slideshow
A simple factorial program.
Pastable version of
Closing database connections properly
<div style="overflow:auto;border:solid 1px #ccc;background:#000;color:#F8F8F8"> <div class="section"> <span style="margin:0;padding:4px 6px;font-size:12px;float:right;">Function from the Articles bean.</span> <pre style="float:left;margin:0 10px;border-right:0;color:#666;">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60</pre> <pre class="sunburst"><span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">/**</span></span> <span style="color:#AEAEAE;font-style:italic;"> * Get the article destined for the front page</span> <span style="color:#AEAEAE;font-style:italic;"> *</span> <span style="color:#AEAEAE;font-style:italic;"> * <span style="color:#E28964;">@return</span> a linked list of the articles</span> <span style="color:#AEAEAE;font-style:italic;"> <span style="color:#AEAEAE;font-style:italic;">*/</span></span> <span style="color:#99CF50;">public </span><span style="color:#99CF50;">LinkedList</span><span style="color:#99CF50;"><ArticleBean></span> <span style="color:#89BDFF;">getFrontpageArticles</span>() { <span style="color:#99CF50;">DatabaseBean</span> dbaBean = <span style="color:#E28964;">new</span> <span style="color:#99CF50;">DatabaseBean</span>(); <span style="color:#9B859D;">LinkedList</span><span style="color:#E28964;"><</span><span style="color:#99CF50;">ArticleBean</span><span style="color:#E28964;">></span> listOfBeans = <span style="color:#E28964;">new</span> <span style="color:#9B859D;">LinkedList</span><span style="color:#E28964;"><</span><span style="color:#99CF50;">ArticleBean</span><span style="color:#E28964;">></span>(); <span style="color:#E28964;">try</span> { dbaBean.setPrepStmt(dbaBean.getConn().prepareStatement( <span style="color:#65B042;"><span style="color:#65B042;">"</span>SELECT id, title, url, author, date_time, article_text <span style="color:#65B042;">"</span></span> <span style="color:#E28964;">+</span> <span style="color:#65B042;"><span style="color:#65B042;">"</span>FROM articles <span style="color:#65B042;">"</span></span> <span style="color:#E28964;">+</span> <span style="color:#65B042;"><span style="color:#65B042;">"</span>ORDER BY id desc <span style="color:#65B042;">"</span></span> <span style="color:#E28964;">+</span> <span style="color:#65B042;"><span style="color:#65B042;">"</span>LIMIT 5;<span style="color:#65B042;">"</span></span>)); } <span style="color:#E28964;">catch</span> (<span style="color:#9B859D;">SQLException</span> <span style="color:#99CF50;">SQLEx</span>) { logger.fatal(<span style="color:#65B042;"><span style="color:#65B042;">"</span>Problem with the SQL in the ArticleProcessBean.getFrontpageArticles() function<span style="color:#65B042;">"</span></span>); logger.fatal(<span style="color:#99CF50;">SQLEx</span>); } <span style="color:#9B859D;">ResultSet</span> result = dbaBean.executeQuery(); <span style="color:#E28964;">try</span> { <span style="color:#E28964;">while</span> (result.next()) { <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span> Make a new ArticleBeanTest that represents one article</span> <span style="color:#99CF50;">ArticleBean</span> articleBean = <span style="color:#E28964;">new</span> <span style="color:#99CF50;">ArticleBean</span>(); <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span> Set the properties of the bean</span> articleBean.setArticleID(result.getString(<span style="color:#65B042;"><span style="color:#65B042;">"</span>id<span style="color:#65B042;">"</span></span>)); articleBean.setAuthor(result.getString(<span style="color:#65B042;"><span style="color:#65B042;">"</span>author<span style="color:#65B042;">"</span></span>)); articleBean.setTitle(result.getString(<span style="color:#65B042;"><span style="color:#65B042;">"</span>title<span style="color:#65B042;">"</span></span>)); articleBean.setURL(result.getString(<span style="color:#65B042;"><span style="color:#65B042;">"</span>url<span style="color:#65B042;">"</span></span>)); articleBean.setArticleText(result.getString(<span style="color:#65B042;"><span style="color:#65B042;">"</span>article_text<span style="color:#65B042;">"</span></span>)); articleBean.setDateTime(result.getTimestamp(<span style="color:#65B042;"><span style="color:#65B042;">"</span>date_time<span style="color:#65B042;">"</span></span>)); <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span> Process this articles tags</span> <span style="color:#E28964;">try</span> { <span style="color:#99CF50;">TagProcessBean</span> tagProcessBean = <span style="color:#E28964;">new</span> <span style="color:#99CF50;">TagProcessBean</span>(); tagProcessBean.setArticleID(<span style="color:#65B042;"><span style="color:#65B042;">"</span><span style="color:#65B042;">"</span></span> <span style="color:#E28964;">+</span> result.getInt(<span style="color:#65B042;"><span style="color:#65B042;">"</span>id<span style="color:#65B042;">"</span></span>)); <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span> Set the user in the TagProcessBean *cast to String*</span> articleBean.setTags(tagProcessBean.getArticleTags()); <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span> Assign the results to the bean</span> } <span style="color:#E28964;">catch</span> (<span style="color:#9B859D;">SQLException</span> <span style="color:#99CF50;">SQLEx</span>) { logger.warn(<span style="color:#99CF50;">SQLEx</span>); } listOfBeans.add(articleBean); <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span>Add the now populated bean to the list to be returned for display</span> } } <span style="color:#E28964;">catch</span> (<span style="color:#9B859D;">SQLException</span> <span style="color:#99CF50;">SQLEx</span>) { logger.warn(<span style="color:#65B042;"><span style="color:#65B042;">"</span>You had an error mapping objects in ArticleProcessBean.getFrontpageArticles()<span style="color:#65B042;">"</span></span>); logger.warn(<span style="color:#99CF50;">SQLEx</span>); } <span style="color:#E28964;">try</span> { result.close(); dbaBean.close(); } <span style="color:#E28964;">catch</span> (<span style="color:#9B859D;">SQLException</span> <span style="color:#99CF50;">SQLEx</span>) { logger.warn(<span style="color:#65B042;"><span style="color:#65B042;">"</span>There was an error closing the resultset and the database connection.<span style="color:#65B042;">"</span></span>); logger.warn(<span style="color:#99CF50;">SQLEx</span>); } <span style="color:#E28964;">return</span> listOfBeans; } </pre> </div> </div> <div style="overflow:auto;border:solid 1px #ccc;background:#000;color:#F8F8F8"> <div class="section"> <span style="margin:0;padding:4px 6px;font-size:12px;float:right;">The database bean</span> <pre style="float:left;margin:0 10px;border-right:0;color:#666;">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96</pre> <pre class="sunburst"><span style="color:#E28964;">package</span> <span style="color:#89BDFF;">com.mysite.utilities</span>; <span style="color:#E28964;">import</span> <span style="text-decoration:underline;">org.apache.log4j.Logger</span>; <span style="color:#E28964;">import</span> <span style="text-decoration:underline;">javax.naming.InitialContext</span>; <span style="color:#E28964;">import</span> <span style="text-decoration:underline;">javax.naming.NamingException</span>; <span style="color:#E28964;">import</span> <span style="text-decoration:underline;">javax.sql.DataSource</span>; <span style="color:#E28964;">import</span> <span style="text-decoration:underline;">java.sql.*</span>; <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">/**</span></span> <span style="color:#AEAEAE;font-style:italic;"> * Contains a collection of database access related functions.</span> <span style="color:#AEAEAE;font-style:italic;"> * Including update and execute.</span> <span style="color:#AEAEAE;font-style:italic;"> <span style="color:#AEAEAE;font-style:italic;">*/</span></span> <span style="color:#99CF50;">public </span><span style="color:#99CF50;">class</span> <span style="text-decoration:underline;">DatabaseBean</span> { <span style="color:#99CF50;">private</span> <span style="color:#99CF50;">static</span> <span style="color:#99CF50;">final</span> <span style="color:#9B859D;">Logger</span> logger = <span style="color:#9B859D;">Logger</span>.getLogger(<span style="color:#99CF50;">DatabaseBean</span>.<span style="color:#99CF50;">class</span>); <span style="color:#99CF50;">private</span> <span style="color:#9B859D;">Connection</span> conn; <span style="color:#99CF50;">private</span> <span style="color:#9B859D;">PreparedStatement</span> prepStmt; <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;"> /**</span></span> <span style="color:#AEAEAE;font-style:italic;"> * Zero argument constructor</span> <span style="color:#AEAEAE;font-style:italic;"> * Setup generic databse connection in here to avoid redundancy</span> <span style="color:#AEAEAE;font-style:italic;"> * The connection details are in /META-INF/context.xml</span> <span style="color:#AEAEAE;font-style:italic;"> <span style="color:#AEAEAE;font-style:italic;">*/</span></span> <span style="color:#99CF50;">public </span><span style="color:#89BDFF;">DatabaseBean</span>() { <span style="color:#E28964;">try</span> { <span style="color:#9B859D;">InitialContext</span> initContext = <span style="color:#E28964;">new</span> <span style="color:#9B859D;">InitialContext</span>(); <span style="color:#9B859D;">DataSource</span> ds = (<span style="color:#9B859D;">DataSource</span>) initContext.lookup(<span style="color:#65B042;"><span style="color:#65B042;">"</span>java:/comp/env/jdbc/mysite<span style="color:#65B042;">"</span></span>); conn = ds.getConnection(); } <span style="color:#E28964;">catch</span> (<span style="color:#9B859D;">SQLException</span> <span style="color:#99CF50;">SQLEx</span>) { logger.fatal(<span style="color:#65B042;"><span style="color:#65B042;">"</span>There was a problem with the database connection.<span style="color:#65B042;">"</span></span>); logger.fatal(<span style="color:#99CF50;">SQLEx</span>); logger.fatal(<span style="color:#99CF50;">SQLEx</span>.getCause()); } <span style="color:#E28964;">catch</span> (<span style="color:#9B859D;">NamingException</span> nameEx) { logger.fatal(<span style="color:#65B042;"><span style="color:#65B042;">"</span>There was a naming exception<span style="color:#65B042;">"</span></span>); logger.fatal(nameEx); logger.fatal(nameEx.getCause()); } } <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;"> /**</span></span> <span style="color:#AEAEAE;font-style:italic;"> * Execute a query. Do not use for statements (update delete insert etc).</span> <span style="color:#AEAEAE;font-style:italic;"> *</span> <span style="color:#AEAEAE;font-style:italic;"> * <span style="color:#E28964;">@return</span> A ResultSet of the execute query. A set of size zero if no results were returned. It is never null.</span> <span style="color:#AEAEAE;font-style:italic;"> * <span style="color:#E28964;">@see</span> #executeUpdate() for running update, insert delete etc.</span> <span style="color:#AEAEAE;font-style:italic;"> <span style="color:#AEAEAE;font-style:italic;">*/</span></span> <span style="color:#99CF50;">public </span><span style="color:#99CF50;">ResultSet</span> <span style="color:#89BDFF;">executeQuery</span>() { <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span> This is the returned query from the database.</span> <span style="color:#9B859D;">ResultSet</span> result = <span style="color:#3387CC;">null</span>; <span style="color:#E28964;">try</span> { result = prepStmt.executeQuery(); logger.debug(prepStmt.toString()); } <span style="color:#E28964;">catch</span> (<span style="color:#9B859D;">SQLException</span> <span style="color:#99CF50;">SQLEx</span>) { logger.fatal(<span style="color:#65B042;"><span style="color:#65B042;">"</span>There was an error running a query<span style="color:#65B042;">"</span></span>); logger.fatal(<span style="color:#99CF50;">SQLEx</span>); } <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span> Return the result set to the caller and finish this database call</span> <span style="color:#E28964;">return</span> result; } <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;"> /**</span></span> <span style="color:#AEAEAE;font-style:italic;"> * Close the open database connection. This method is called from the process beans as the connections cant be closed before the resultset is returned<br /></span> <span style="color:#AEAEAE;font-style:italic;"> * <p/></span> <span style="color:#AEAEAE;font-style:italic;"> * This closes both the statment and the connection</span> <span style="color:#AEAEAE;font-style:italic;"> <span style="color:#AEAEAE;font-style:italic;">*/</span></span> <span style="color:#99CF50;">public </span><span style="color:#99CF50;">void</span> <span style="color:#89BDFF;">close</span>() { <span style="color:#E28964;">try</span> { prepStmt.close(); prepStmt = <span style="color:#3387CC;">null</span>; conn.close(); conn = <span style="color:#3387CC;">null</span>; } <span style="color:#E28964;">catch</span> (<span style="color:#9B859D;">SQLException</span> <span style="color:#99CF50;">SQLEx</span>) { logger.warn(<span style="color:#65B042;"><span style="color:#65B042;">"</span>There was an error closing the database connection.<span style="color:#65B042;">"</span></span>); } } <span style="color:#99CF50;">public </span><span style="color:#99CF50;">Connection</span> <span style="color:#89BDFF;">getConn</span>() { <span style="color:#E28964;">return</span> conn; } <span style="color:#99CF50;">public </span><span style="color:#99CF50;">PreparedStatement</span> <span style="color:#89BDFF;">getPrepStmt</span>() { <span style="color:#E28964;">return</span> prepStmt; } <span style="color:#99CF50;">public </span><span style="color:#99CF50;">void</span> <span style="color:#89BDFF;">setPrepStmt</span>(<span style="color:#9B859D;">PreparedStatement</span> prepStmt) { <span style="color:#3E87E3;">this</span>.prepStmt = prepStmt; } } </pre> </div> </div> <div style="overflow:auto;border:solid 1px #ccc;background:#000;color:#F8F8F8"> <div class="section"> <span style="margin:0;padding:4px 6px;font-size:12px;float:right;">Context.xml</span> <pre style="float:left;margin:0 10px;border-right:0;color:#666;">1 2 3 4 5 6 7 8 9 10 11 12 13 14</pre> <pre class="sunburst"> <span style="color:#E28964;"><</span><span style="color:#99CF50;">Resource</span> name=<span style="color:#65B042;"><span style="color:#65B042;">"</span>jdbc/mysite<span style="color:#65B042;">"</span></span> auth=<span style="color:#65B042;"><span style="color:#65B042;">"</span>Container<span style="color:#65B042;">"</span></span> type=<span style="color:#65B042;"><span style="color:#65B042;">"</span>javax.sql.DataSource<span style="color:#65B042;">"</span></span> username=<span style="color:#65B042;"><span style="color:#65B042;">"</span>user<span style="color:#65B042;">"</span></span> password=<span style="color:#65B042;"><span style="color:#65B042;">"</span>pass<span style="color:#65B042;">"</span></span> driverClassName=<span style="color:#65B042;"><span style="color:#65B042;">"</span>com.mysql.jdbc.Driver<span style="color:#65B042;">"</span></span> url=<span style="color:#65B042;"><span style="color:#65B042;">"</span>jdbc:mysql://localhost:3306/mysite?autoReconnect=true<span style="color:#65B042;">"</span></span> maxActive=<span style="color:#65B042;"><span style="color:#65B042;">"</span>10<span style="color:#65B042;">"</span></span> maxIdle=<span style="color:#65B042;"><span style="color:#65B042;">"</span>0<span style="color:#65B042;">"</span></span> maxWait=<span style="color:#65B042;"><span style="color:#65B042;">"</span>5000<span style="color:#65B042;">"</span></span> removeAbandoned=<span style="color:#65B042;"><span style="color:#65B042;">"</span>true<span style="color:#65B042;">"</span></span> removeAbandonedTimeout=<span style="color:#65B042;"><span style="color:#65B042;">"</span>15<span style="color:#65B042;">"</span></span> validationQuery=<span style="color:#65B042;"><span style="color:#65B042;">"</span>SELECT 1;<span style="color:#65B042;">"</span></span> <span style="color:#E28964;">/</span><span style="color:#E28964;">></span> </pre> </div> </div> <a href="http://refactormycode.com/codes/409-clsing-database-connections-properly" style="color:#fff" title="As seen on RefactorMyCode.com"><img alt="Small_logo" src="http://refactormycode.com/images/small_logo.gif" style="border:0" /></a>