Remove boilerplate from db code

后端 未结 5 1044
深忆病人
深忆病人 2021-01-12 09:17

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;

         


        
相关标签:
5条回答
  • 2021-01-12 10:04

    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.

    0 讨论(0)
  • 2021-01-12 10:08

    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");
                        }
                    }();
        }
    }
    
    0 讨论(0)
  • 2021-01-12 10:09

    I would use hibernate or JPA to reduce the clutter...

    0 讨论(0)
  • 2021-01-12 10:11

    If you already have a DataSource you can use Spring JdbcTemplate for:

    • greatly reduced boilerplate code
    • have a good sql exception hierarchy to handle common database problems with specific runtime exceptions
    • (later with further Spring usage) use declarative transaction management

    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.

    0 讨论(0)
  • 2021-01-12 10:18

    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.

    0 讨论(0)
提交回复
热议问题