It seems that every time I want to perform a db query, I have to write the following:
Connection conn = null;
Statement stmt = null;
ResultSet rset = null;
Yes, use the Sping JDBC Template classes (http://static.springsource.org/spring/docs/2.0.x/reference/jdbc.html).
Or if you don't use Spring copy the template pattern that they are using in your own code.
Make a helper method?
public class DBHelper
{
public static Object run(string sql, List params, ResultHandler rhandler)
{
Connection conn = null;
Statement stmt = null;
ResultSet rset = null;
try {
conn = dataSource.getConnection();
stmt = conn.prepareStatement(sql);
int i = 0;
for(Object p in params)
{
stmt.setObject(++i, p);
}
rset = stmt.executeQuery();
return rhandler.handle(rset);
} finally {
try { rset.close(); } catch(Exception e) { }
try { stmt.close(); } catch(Exception e) { }
try { conn.close(); } catch(Exception e) { }
}
}
}
public interface ResultHandler
{
public Object handle(ResultSet)
}
public class Test
{
public static void main(String[] args)
{
String s = (String)DBHelper.run("select * from mytable where col = ?",
Arrays.asList({"foo"}),
new ResultHandler
{
public Object handle(ResultSet r)
{
r.first();
return r.getString("col2");
}
}();
}
}
I would use hibernate or JPA to reduce the clutter...
If you already have a DataSource you can use Spring JdbcTemplate for:
If it seems too heavy for the moment you could implement some utility classes and methods for the 'boilerplate part'. Studying the source of JdbcTemplate should help in this case.
DbUtils is a very useful framework, I've used it for smaller projects where Spring and Hibernate are overkill. It's able to do some object mapping as well.