2016-03-29 2 views
1

Когда я пытаюсь выбрать запись с помощью Подготовленного заявления, она всегда дает мне последние вставленные значения, которые я недавно добавил.Почему оператор select всегда возвращает последние вставленные значения?

Первое, что я сделал, это поиск записи в моем первом столе. Если запись существует, таблица внешнего ключа заполняет значения. Мои начальные и внешние таблицы клавиш хорошо работают. Значения, соответствующие соответствующим компонентам, но не дают мне правильных значений. Любая помощь?

1st Table

Это первичный ключ таблицы ссылок внешних ключей таблицы, которая является вторым столом.

2nd Table

Выбрать запрос:

String searchSECTIONNAME = "SELECT * FROM allsections_list WHERE SECTION_NAME = ?";//1st Select Statement 

String searchSECTIONSETTINGS = "SELECT allsections_list.`SECTION_ID`, allsections_settings.ADVISER_ASSIGNED, allsections_settings.SECTION_POPULIMIT,\n" + 
    "allsections_settings.ROOM_ASSGN, allsections_settings.YRLEVEL_ASSGN, allsections_settings.SCHOOL_YEAR, allsections_settings.SESSION_ASSIGNED\n" + 
    "FROM allsections_list\n" + 
    "RIGHT JOIN allsections_settings\n" + 
    "ON allsections_list.`SECTION_ID`=allsections_settings.`SECTION_ID`";//2nd Select Statement 

Так что я сделал здесь присоединиться к SECTION_NAME столбец внешнего ключа таблицы с использованием Right Регистрация. Если запись существует, она присоединится к двум таблицам.

Код:

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {           
    String searchSection = Section_SearchSection_Textfield.getText(); 


    try (Connection myConn = DBUtil.connect(); 
     PreparedStatement myFirstPs = myConn.prepareStatement(searchSECTIONNAME);) 
     { 
      myFirstPs.setString(1, searchSection); 

     try (ResultSet myFirstRs = myFirstPs.executeQuery()) 
     { 
      int resultCounter = 0; 
      while (myFirstRs.next()) 
      { 
       String mySectionName = myFirstRs.getString(2);//Get the value of SECTION_NAME 
       Section_SectionName_TextField.setText(mySectionName); 
       Section_SectionName_TextField.setEnabled(true); 

       try (PreparedStatement mySecondPs = myConn.prepareStatement(searchSECTIONSETTINGS)) 
       { 
        try (ResultSet mySecondRs = mySecondPs.executeQuery()) 
        { 
         while (mySecondRs.next()) 
         { 
          String myAdviserAssigned = mySecondRs.getString(2); 
          Section_Student_Limit_ComboBox1.setSelectedItem(myAdviserAssigned); 
          Section_Student_Limit_ComboBox1.setEnabled(true); 

          String mySectionPopulation = mySecondRs.getString(3); 
          Section_Student_Limit_ComboBox.setSelectedItem(mySectionPopulation); 
          Section_Student_Limit_ComboBox.setEnabled(true); 

          String myRoomAssigned = mySecondRs.getString(4); 
          Section_Room_Assignment_ComboBox.setSelectedItem(myRoomAssigned); 
          Section_Room_Assignment_ComboBox.setEnabled(true); 

          String myYearLevelAssigned = mySecondRs.getString(5); 
          Section_Session_Level_ComboBox.setSelectedItem(myYearLevelAssigned); 
          Section_Session_Level_ComboBox.setEnabled(true); 

          String mySchoolYear = mySecondRs.getString(6); 
          Section_SchooYear_ComboBox.setSelectedItem(mySchoolYear); 
          Section_SchooYear_ComboBox.setEnabled(true); 

          String mySessionAssigned = mySecondRs.getString(7); 
          Section_Session_Settings_ComboBox.setSelectedItem(mySessionAssigned); 
          Section_Session_Settings_ComboBox.setEnabled(true); 

          resultCounter++; 

         }//end of loop mySecondRs (ResultSet) 
        }//end of try mySecondRs (ResultSet) 
       }//end of try mySecondPs (PreparedStatement) 

      }//end of loop myFirstRs (ResultSet) 
      if (resultCounter == 1)//If exist 
      { 
       JOptionPane.showMessageDialog(null, "Data Found"); 
      } 
      else//If not exist 
       JOptionPane.showMessageDialog(null, "No Data Found"); 
     }//end of try myFirstRs (ResultSet) 

    }//end of try myFirstPs (PreparedStatement) 

     catch (SQLException e) 
     { 
      DBUtil.processException(e); 
     }//end of catch 
} 

Как вы можете видеть здесь. В моем первом ResultSetmyFirstRs при поиске существующего SECTION_NAME значения внешнего ключа будут заполняться. Если что-то в моей петле меня исправит. Заранее спасибо!

Обновление!

Я добавляю предложение ORDER BY в свой второй запрос выбора. Потому что без этого база данных будет возвращать то, что он хочет, так, что я сделал это изменить запрос и добавить ORDER BY пункта, как это:

String searchSECTIONSETTINGS = "SELECT allsections_list.`SECTION_ID`, allsections_settings.ADVISER_ASSIGNED, allsections_settings.SECTION_POPULIMIT,\n" + 
    "allsections_settings.ROOM_ASSGN, allsections_settings.YRLEVEL_ASSGN, allsections_settings.SCHOOL_YEAR, allsections_settings.SESSION_ASSIGNED\n" + 
    "FROM allsections_list\n" + 
    "RIGHT JOIN allsections_settings\n" + 
    "ON allsections_list.`SECTION_ID` = allsections_settings.`SECTION_ID`" + 
    "ORDER BY allsections_list.SECTION_ID"; 

Тем не менее дает мне неправильные значения, когда я запускаю проект. Я попытался запустить это в запросе NetBeans и присвоить значения в порядке ASC.

enter image description here

+0

Почему вы проверяете только 'resultCounter == 1' вместо'> 0'? – callyalater

+0

@callyalater Когда я использовал 'resultCounter> 0', все еще давал мне последние значения. Спасибо, что ответили. – Francisunoxx

ответ

0

я нашел простое решение. Я присоединился к двум таблицам, используя Right Join.

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {           
    String searchSection = Section_SearchSection_Textfield.getText().replace("!", "!!").replace("%", "!%").replace("_", "!_") 
    .replace("[", "!["); 

    String searchSECTIONSETTINGS = "SELECT allsections_list.SECTION_ID as 'ID', allsections_list.SECTION_NAME as 'Section Name', allsections_settings.ADVISER_ASSIGNED as 'Adviser', allsections_settings.SECTION_POPULIMIT as 'Population',\n" + 
    "allsections_settings.ROOM_ASSGN as 'Room', allsections_settings.YRLEVEL_ASSGN as 'Year Level', allsections_settings.SCHOOL_YEAR as 'School Year', allsections_settings.SESSION_ASSIGNED as 'Session'\n" + 
    "FROM allsections_list\n" + 
    "RIGHT JOIN allsections_settings\n" + 
    "ON allsections_list.SECTION_ID = allsections_settings.SECTION_ID\n" + 
    "WHERE SECTION_NAME LIKE ? ESCAPE '!'\n" + 
    "ORDER BY allsections_list.SECTION_ID"; 

    if (searchSection.isEmpty()) 
    { 
     JOptionPane.showMessageDialog(null, "Please fill up this fields"); 
    } 
    else 
     try (Connection myConn = DBUtil.connect(); 
     PreparedStatement myFirstPs = myConn.prepareStatement(searchSECTIONSETTINGS);) 
     { 
       myFirstPs.setString(1, "%" +searchSection +"%"); 
     try (ResultSet myFirstRs = myFirstPs.executeQuery()) 
     { 
      int resultCounter = 0; 
      while (myFirstRs.next()) 
      { 
       String name = myFirstRs.getString(2); 
       sectionJTable.setModel(DbUtils.resultSetToTableModel(myFirstRs)); 
       resultCounter++; 
      }//end of loop myFirstRs (ResultSet) 

      if (resultCounter > 0)//If exist 
      { 
       JOptionPane.showMessageDialog(null, "Data Found"); 
      } 
      else//If not exist 
       JOptionPane.showMessageDialog(null, "No Data Found"); 
     }//end of try myFirstRs (ResultSet) 

    }//end of try myFirstPs (PreparedStatement) 

     catch (SQLException e) 
     { 
      DBUtil.processException(e); 
     }//end of catch 
}