我有一个简单的Servlet。数据存储在MySQL数据库中。我想将DAO与连接池和PreparedStatement结合使用,即我可以这样做:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
...
String results = myDao.getResults(id);
...
}
其中javax DataSource
和MyDao
是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的替代模式?