java
  • sql
  • 2017-02-03 2 views 0 likes 
    0

    Почему мой else {} не работает? Нет выхода. My if {} работает отлично. Помогите оценить!Почему нет результата ResultSet, когда результатов нет?

    String s2 = "SELECT CCA FROM generatedchoices WHERE category='" + category + "' AND intensiveness='"+ intensiveness + "'"; 
         rs2 = st.executeQuery(s2); 
    
         if(rs2!=null){ 
          while (rs2.next()) { 
           ccalist.add(rs2.getString("CCA")); 
          } 
         } 
         else{ 
          System.out.println("No combination!"); 
          //JOptionPane.showMessageDialog(null, "No combination found!"); 
         } 
    
    +2

    Зачем нужно вводить блок 'else', если блок' if' работает отлично? –

    +0

    rs2 не будет пустым, если нет записи. 'rs2.next()' будет ложным – GurV

    +0

    , если ваш блок 'if' работает нормально, почему блок' else' работает? – Chip

    ответ

    0

    От the docs for Statement#executeQuery (курсив мой):

    Возвращает: объект ResultSet, который содержит данные, полученные с помощью данного запроса; никогда не нулевой

    Если запрос не возвращает ни одной строки, вы не получите null. Вы получите ResultSet, который пуст. Простой трюк, чтобы проверить это, чтобы использовать isBeforeFirst() как указано in this answer, а не проверка null:

    if (resultSet.isBeforeFirst()) {  
        // loop over results 
    } else { 
        // no results returned 
    } 
    

    Если вы не чувствуете себя комфортно с этим решением, или если по каким-то причинам это вызывает проблемы для вас, другой простой способ, чтобы просто проверить, если вы обработаны результаты или нет, например:

    rs2 = st.executeQuery(s2); 
    
    boolean hadResults = false; 
    
    while (rs2.next()) { 
        ccalist.add(rs2.getString("CCA")); 
        hadResults = true; 
    } 
    
    if (!hadResults) { 
        System.out.println("No combination!"); 
        //JOptionPane.showMessageDialog(null, "No combination found!"); 
    } 
    

    или любые другие различные способы, вы можете придумать для кожи этой конкретной кошки.

    +0

    Как тест 'длина'' ccalist' –

    +0

    @ScaryWombat Это тоже работает, хотя вы должны быть осторожны, чтобы не делать никаких предположений о содержимом 'ccalist' до этого фрагмента кода. С предоставленной [отсутствием] информации вы должны сравнить ее размер до и после цикла. Кроме того, это подразумевает предположение, что 'ccalist' на самом деле является списком какого-то типа, и что' add' всегда увеличивает размер, а не путающе названную переменную, например. некоторый тип набора. Но если вы знаете больше о 'ccalist', вы можете немного сузить свои варианты. –

    1

    Вы делаете

    rs2 = st.executeQuery(s2); 
    

    так rs2 никогда не будет нулевым.

    Может быть, что вы хотите ти if (rs2.isBeforeFirst()) {...} else {...}

    см http://docs.oracle.com/javase/7/docs/api/java/sql/ResultSet.html#isBeforeFirst()

    Смежные вопросы