私は、各スレッドがrandomly find columns for that table
それらの列を使用するマルチスレッド プロジェクトに取り組んでおり、SELECT sql query
その SELECT SQL クエリを実行します。そのクエリを実行した後、結果セットをループして、各列のデータを に追加しますList<String>
。
ここには で区切られたものcolumnsList
が含まれます。例えば-columns
comma
col1, col2, col3
以下は私のコードです。
class ReadTask implements Runnable {
public ReadTask() {
}
@Override
public run() {
...
while ( < 60 minutes) {
.....
final int id = generateRandomId(random);
final String columnsList = getColumns(table.getColumns());
final String selectSql = "SELECT " + columnsList + " from " + table.getTableName() + " where id = ?";
resultSet = preparedStatement.executeQuery();
List<String> colData = new ArrayList<String>(columnsList.split(",").length);
boolean foundData = false;
if (id >= startValidRange && id <= endValidRange) {
if (resultSet.next()) {
foundData = true;
for (String column : columnsList.split(",")) {
colData.add(resultSet.getString(column.trim()));
}
resultSet.next();//do I need this here?
}
} else if (resultSet.next()) {
addException("Data Present for Non Valid ID's", Read.flagTerminate);
}
....
}
}
private static void addException(String cause, boolean flagTerminate) {
AtomicInteger count = exceptionMap.get(cause);
if (count == null) {
count = new AtomicInteger();
AtomicInteger curCount = exceptionMap.putIfAbsent(cause, count);
if (curCount != null) {
count = curCount;
}
}
count.incrementAndGet();
if(flagTerminate) {
System.exit(1);
}
}
}
問題文:-
SELECT
SQLクエリを実行した後。以下は私の2つのシナリオです-
- ID が有効な範囲内にあるかどうかを確認する必要があります。有効範囲内にある場合
resultSet
は、データがあるかどうかを確認します。データがある場合は、 fromresultSet
を使用してループし、文字列のリストに追加し始めます。columns
columnsList
coldData
- それ以外の場合、id が有効な範囲内にない場合は、からデータが返されていないことを確認する必要があります
resultSet
。しかし、何らかの形でデータを取得していて、プログラムを停止するためにフラグが true の場合は、プログラムを終了します。それ以外の場合は、データを取得しているが、プログラムを停止するためにフラグが false の場合は、それらが何回発生しているかを数えます。このため、addException
メソッドを作成しました。
上記の2つについて私がここで行っている方法scenarios
が正しいかどうか、誰かが私を助けてくれますか? if/else loop
上記の 2 つのシナリオでは、コードをさらに改善できるようです。