問題は、少なくとも1つの結果があるかどうかを知るために最初の結果を読んでから、次の結果を消費しようとし、最初の結果を見逃すことです(質問の説明から適応)。ここでこれがどのように機能するかを説明しました。
この問題の可能な解決策は、クエリが問題なく実行され、結果が得られたと仮定して、データ (またはList
データの) を取得し、最後のステップとして、データが null でないか、List
データの が空でないかどうかを確認することです。
提案された解決策を示すためにNaveen の回答から適応されたコード
PreparedStatement prodsQuery =
con.prepareStatement("SELECT * FROM products where ID=?");
prodsQuery.setInt(1,removeName);
ResultSet rs = prodsQuery.executeQuery();
取得する結果が 1 つだけであると仮定します。
//also assuming you will set the results in a Data class (yes, this can be replaced)
Data data = null;
if (rs.next()) {
//logic to retrieve data...
data = new Data();
data.setSomething(rs.get(1));
//more and more code to fill the data...
//because it looks that you need it as String (wonder why you return a String as well)
return data.toString();
}
//note: I use an else statement to check if indeed there were no results at all
//else statement added using a line separator for code explanation purposes
else {
m = "ID not found.";
return m;
}
取得する結果のリストがあると仮定します。
//also assuming you will set the results in a Data class (yes, this can be replaced)
List<Data> dataList = new ArrayList<Data>();
while (rs.next()) {
//logic to retrieve data...
Data data = new Data();
data.setSomething(rs.get(1));
//more and more code to fill the data...
//because it looks that you need it as String (wonder why you return a String as well)
dataList.add(data);
}
//in this case, there's no validation in order to know if there's any result
//the validation must be in the client of this class and method checking if
//the result list is empty using if(!List#isEmpty) { some logic... }
return dataList;