rs.next() возвращает false, когда существует запись

#java #prepared-statement #resultset

Вопрос:

В цикле while он не заходил внутрь. Но запись существует в базе данных. Почему в этом случае результирующий набор возвращает значение false?

 String sql = "SELECT * FROM tablename where name=?"; PreparedStatement smt = con.preparestatement(sql); smt.setString(1, "john"); ResultSet rs = smt.executeQuery(); ResultSetMetaData rsmd = rs.getMetaData(); int columnCount = rsmd.getColumnCount(); Listlt;Objectgt; colValues = new ArrayListlt;Objectgt;();  while(rs.next()) {  for(int i=1;ilt;=columnCount;i  ) {  name = rsmd.getColumnName(i);  Object name1 = rs.getObject(name);  colValues.add(name1);  } }  

Комментарии:

1. Похоже, у вас есть некоторые сомнения или путаница в отношении работы SQL. Это неправильное использование для поиска имени столбца в SQL-запросе. Скорее, вы должны утверждать, что конкретный уже известный столбец имеет определенное строковое значение. Кроме того, вы ссылаетесь на результирующий набор, вызываемый rs1 в вашем коде Java, но он нигде не определен.

2. @TimBiegeleisen Извините за опечатку. Это правильный фрагмент. Ты можешь провести меня сюда?

3. Если ваш код действительно никогда не входит в while цикл, то записей с именем Джон нет.

4. @TimBiegeleisen, Но он существует в базе данных.

5. Имейте в виду, что сравнение строк SQL чувствительно к регистру, поэтому "John" это не то же самое, что "john" .