私はマルチスレッドプロジェクトに取り組んでおり、そこでcolumns
使用するものをランダムに見つけてから、SELECT sql
そのSELECTsqlクエリを実行します。
それらの列を見つけた後-
- IDが有効範囲内にあるかどうかを確認する必要があります。有効範囲内にある場合は、columnsListからそれらの列を使用して結果セットをループし、データを取得して変数に格納します。
- それ以外の場合、idが有効な範囲内にない場合は、結果セットからデータが返されないことを確認する必要があります。しかし、どういうわけか、データを取得していて、プログラムを停止するためのフラグがtrueである場合は、プログラムを終了します。それ以外の場合、データを取得しているが、プログラムを停止するためのフラグがfalseの場合は、発生しているものの数を数えます。
以下は私のコードです-
private volatile int count;
@Override
public void run() {
.....
final String columnsList = getColumns(table.getColumns());
....
rs = preparedStatement.executeQuery();
....
if (Read.endValidRange < id && id < Read.startValidRange) {
while (rs.next()) {
for(String column: columnsList.split(",")) {
System.out.println(column + ": " + rs.getString(column));
}
}
} else {
if(rs.next() && Read.flagTerminate) {
System.exit(1);
} else {
count++;
}
}
....
}
/**
* A simple method to get the column names in the order in which it was
* inserted
*
* @param columns
* @return
*/
private String getColumns(final List<String> columns) {
List<String> copy = new ArrayList<String>(columns);
Collections.shuffle(copy);
int rNumber = random.nextInt(columns.size());
List<String> subList = copy.subList(0, rNumber);
Collections.sort(subList, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return columns.indexOf(o1) < columns.indexOf(o2) ? -1 : 1;
}
});
return StringUtils.join(subList, ",");
}
問題文-
何が生成されるかに応じてSELECTSQLに異なる列が含まれるたびに、結果セットを反復処理する方法を理解できません。それとは別に、ifelseループでそれをよりクリーンにするにはどうすればよいですか。