我有一个web应用程序,需要通过JDBC从数据库中检索数据并将其显示在前端。它是一个静态数据,它不会被改变。所以我只需要一次检索数据并存储在一个静态变量中,这样我就可以每次使用这些数据而不是查询数据库。以下是示例代码:如何将从数据库检索到的数据存储到变量中,以便我可以避免再次触击数据库
public class SampleClass(){
static Map<String, BigDecimal> productMap = null;
public Map<String, BigDecimal> getDatafromDB(Connection conn, PreparedStatement stmt, ResultSet rs) throws SQLException{
if(productMap == null){
productMap = getProductID(conn, stmt, rs);
}
return productMap;
}
public Map<String, BigDecimal> getProductID(Connection conn, PreparedStatement stmt, ResultSet rs) throws SQLException {
logger.debug("retrieving product ID's from product table..");
Map<String, BigDecimal> productMap = new HashMap<String, BigDecimal>();
stmt = conn.prepareStatement("Select * from PRODUCTTABLE");
rs = stmt.executeQuery();
logger.debug("Product ID's retrieved");
while(rs.next()){
productMap.put(rs.getString("PRODUCT_NAME"),rs.getBigDecimal("PRODUCT_ID"));
}
if (stmt != null) {
stmt.close();
}
if (rs != null) {
rs.close();
}
return productMap;
}
}
我从UI通过http servlet请求调用此方法。我第一次运行它时,由于地图为空,它会查询数据库并获取数据并将其发送到UI。当我用新的请求第二次再次访问servlet时,产品地图为空,并再次查询数据库并获取数据。由于它是一个静态变量,它应该只被初始化一次,为什么它仍然为第二个请求为空。有人可以纠正我的代码吗?
在此先感谢
您需要向我们展示了'retreivedatafromDB()'方法 –
而如果别人在你的方法调用之间更新数据库?缓存一些数据库数据没有意义 –
缓存是一种技术,您可能不得不使用它,并且如果想要填充静态初始化程序,也可以考虑使用静态初始化程序!该类只能加载一次! –