2015-04-03 1086 views
0

我正在开发一个eclipse上的动态Web项目。获取/关闭DataSource连接的正确方法

下面是使用DataSource连接MySQL的示例。 这是正确的方法吗?我的意思是在Servlet中获得连接是正常的?

此外,我发现这种方式来获得/关闭连接是单调乏味的,因为每次我想要获取/关闭连接时都需要编写完全相同的代码部分。我认为应该有更好的办法。有人能给我一些建议吗?

谢谢!

@WebServlet(name="HelloUser", urlPatterns={"/hellouser"}) 
public class HelloUserServlet extends HttpServlet{ 
    @Override 
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
      throws ServletException, IOException { 

      DataSource ds = MyDataSourceFactory.getMySQLDataSource(); 
      Connection con = null; 
      Statement stmt = null; 
      ResultSet rs = null; 
      try { 
       con = ds.getConnection(); 
       stmt = con.createStatement(); 
       rs = stmt.executeQuery(...); 
       ... 
      } catch (SQLException e) { 
       e.printStackTrace(); 
      }finally{ 
        try { 
         if(rs != null) rs.close(); 
         if(stmt != null) stmt.close(); 
         if(con != null) con.close(); 
        } catch (SQLException e) { 
         e.printStackTrace(); 
        } 
      } 
     } 
    } 
} 
+1

简短的回答:第龙答:首先学习了'尝试与 - resources'结构,第二考虑学习更高级别的JDBC库,如[春季JDBC(HTTP://docs.spring。 IO /弹簧/文档/电流/弹簧的框架参考/ HTML/jdbc.html)。 – 2015-04-03 17:15:22

+0

谢谢!我将尝试Spring JDBC。 – cht 2015-04-04 03:04:29

回答

3

从Java 7开始,您可以使用try-with-resource(更新JDBC api以实现Autocloseable)。

try-with-resources语句是声明一个 或更多资源的try语句。资源是在程序完成后必须关闭的对象

E.g.

try (Connection con = ds.getConnection(); 
    Statement stmt = con.createStatement(); 
ResultSet rs = stmt.executeQuery(...)) {...} 
+0

谢谢!有用。 – cht 2015-04-04 03:04:44

相关问题