在具有池连接的Web应用程序中重用/缓存PreparedStatements(DataSource)

时间:2014-02-03 23:33:25

标签: java servlets prepared-statement datasource

我有一个简单的Servlet。数据存储在MySQL数据库中。我想将DAO与连接池和PreparedStatement结合使用,即我可以这样做:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  

    ...
    String results = myDao.getResults(id);    
    ...
}

其中javax DataSourceMyDao是Servlet中的类变量(这个线程是否安全?)并在Servlet的init()方法中实例化:

public void init() throws ServletException {
     dataSource = ...
     myDao = new MyDao(dataSource);
} 

MyDao有这样的方法:

 public String getResults(int id) {

     conn = dataSource.getConnection() 
     ps = conn.prepareStatement("SELECT A, B, C WHERE ID = ?");
     ps.setInt(1, id);
     ps.executeUpdate();
     ....
 }

我的问题是PreparedStatement被发送到DB以便在每个请求上重新编译,这似乎与PreparedStatements(除了参数转义)相反。

在Servlet中使用连接池时,是否存在可以保留/缓存PreparedStatements的替代模式?

0 个答案:

没有答案