単一のDateオブジェクトを渡す代わりに、DateオブジェクトのArrayListをfoo(...)
メソッドに渡して操作することを検討してください。
使用するオプションがいくつかあります。
オプション1:パラメーターを変更してPreparedStatementを複数回実行する
public void foo(ArrayList<Date> dateList) {
if(dateList == null)
return;
PreparedStatement stmt = null;
ResultSet rs = null;
java.sql.Date sDate = null;
try{
stmt = getConnection().preparedStatement("select * from some_table p where p.start_date <=? and ?<= p.end_date");
for(Date date: dateList){
try{
sDate = new java.sql.Date(date.getTime());
stmt.clearParameters(); //Clear current parameter values
stmt.setDate(1, sDate);
stmt.setDate(2, sDate);
rs = stmt.executeQuery();
//perform your operations
}finally{
sDate = null;
//mange your resultset closing
}
}
}finally{
//your resource management code
}
}
オプション2:リストにある日付の数を考慮してSQLクエリを作成し、このステートメントを実行してから、結果セットを操作します。
public void foo(ArrayList<Date> dateList) {
if(dateList == null)
return;
PreparedStatement stmt = null;
ResultSet rs = null;
java.sql.Date sDate = null;
StringBuilder builder = new StringBuilder();
try{
//1. Create your dynamic statement
builder.append("SELECT * FROM some_table p WHERE \n");
for(int index = 0; index < dateList.length; index++){
if(index > 0)
builder.append(" OR \n");
builder.append("(p.start_date <=? and ?<= p.end_date)");
}
stmt = getConnection().preparedStatement(builder.toString());
//2. Set the parameters
int index = 1;
for(Date date: dateList){
try{
sDate = new java.sql.Date(date.getTime());
stmt.setDate(index, sDate);
stmt.setDate(index+1, sDate);
index += 2;
}finally{
sDate = null;
//mange your resultset closing
}
}
//3. execute your query
rs = stmt.executeQuery();
//4. perform your operations
}finally{
builder = null;
//your resource management code
}
}