1

このアプリケーションでは、データベーステーブルの多くのエントリを更新する必要があるいくつかのユースケースがあります。データベースとの対話に使用するDataAccessオブジェクトがあります。

更新のコードは次のようになります。

String updateQuery = "UPDATE tbl SET column1=? WHERE column2=?";
for(i=0;;i++){
    Map<Integer, Object> params=new HashMap<Integer, Object>();
    params.put(1,"val"+i);
    params.put(2,"val"+i);
    DataAccess.addBatchParams(updateQuery,params);
}
DataAccess.executeBatch(updateQuery);

DataAccess.addBatchParams(..)の内部

public void addBatchParams(String query, Map<Integer,Object> params){
    ..  // preparedStatements contains all params passed till now.
    ..  
    if(preparedStatements.size() >= BATCH_SIZE){
        executeBatch(query);
        //flush preparedStatements as it has been written to db
    }
    ..  
    ..  
}

私の懸念は、新しい開発者がこれを使用するときはいつでも、バッチ更新の最後に、BATCH_SIZE未満の最後のいくつかのエントリをデータベースにフラッシュするためにexecuteBatch()メソッドを呼び出さなければならないことを知る方法がないことです。これを行うためのより良い方法はありますか?データベースのバッチ更新を行うためのデザインパターンなどはありますか?

どんな助けでも大歓迎です。

4

1 に答える 1

2

両方のメソッドを統合し、メソッドaddBatchParamsexecuteBatchメソッドをプライベートにします。

public void executeBatch(String query, 
    List<? extends Map<Integer,Object>> paramsList) {
    for (Map<Integer,Object> params : paramsList) {
        addBatchParams(query, params);  
    }
    executeBatch(query);
}
于 2012-12-27T18:42:33.473 に答える