DBからJDBCを介してデータを取得してフロントエンドに表示する必要のあるWebアプリケーションがあります。その静的なデータは変更されません。ですから、データを一度だけ取得し、静的変数に格納するだけで済み、データベースを照会する代わりに毎回そのデータを使用することができます。以下はサンプルコードですデータベースから取り出されたデータを変数に格納する方法。
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;
}
}
私はこのメソッドをhttpサーブレットリクエストを通じて呼び出しています。初めて実行するときは、マップがヌルであるため、データベースに照会してデータを取得し、UIに送信します。新しいリクエストでもう一度サーブレットにヒットしたとき、プロダクト・マップはnullであり、再びデータベースに照会してデータを取得しています。静的な変数なので、一度riteで初期化する必要があります。なぜなら、なぜ2番目のリクエストでもまだnullであるからです。誰かが私のコードを修正してもらえますか?事前
あなたは私たちを表示する必要が 'retreivedatafromDB()'メソッド –
そして、何であれば他の誰かメソッド呼び出し間でデータベースを更新しますか? –
キャッシングはあなたが使用しなければならないかもしれないテクニックであり、静的なマップを埋めたい場合は、代わりに静的なイニシャライザを使用することも考えられます。クラスは一度だけロードする必要があります! –