#rs.next()について勘違いをしていたことが判明。
誰か同じような勘違いをしていたら・・・と思い、投稿します。
#rs.next()の解釈について
rs.next()は"ResultSetの次があるかどうかだけを判定するメソッド"だと思っていたのですが、
さらに、"現在の位置から次の1行へ進んでカーソルを当てる"機能もあるようです。
(詳細は、Oracleのページを確認ください。)
間違い.java
ResultSet rs = stmt.executeQuery(sql);
//結果がなければnullを返却する
if(rs.next()){ //←ここで結果の1行目にカーソルが当たっている
return null;
}
//2.リストを生成する
while (rs.next()) { // ←ここで結果の2行目にカーソルが当たっている
list.add(rs.getString("name")); // ←ここで結果び2行目のnameが取れている
}
上記ののようにコーディングしていました。
間違い.javaで生成したリストは、コマンドでSQL叩くより1行少ない!と小一時間悩んでいました・・・。
それもそのはずです。
whileで回す前に、結果の1行目にカーソルが当たってしまっているので、
whileで回そうとした時には、結果の2行目にカーソルが当たってしまい、
結果の1行目はリストに追加されていなかったのです。
#正しいケース
参考までに、下記のようにすれば、結果が0件の場合の処理もかけるようです。
正解.java
ResultSet rs = stmt.executeQuery(sql);
//リストにデータを追加する
while (rs.next()) {
list.add(rs.getString("フィールド名"));
}
//リストがからの場合、nullを返却する
if(list.isEmpty()){
return null;
}
###追記
一部ソースコード修正しました。saka1029さん、Kilisameさんご指摘ありがとうございます!