Когда я пытаюсь выбрать запись с помощью Подготовленного заявления, она всегда дает мне последние вставленные значения, которые я недавно добавил.Почему оператор select всегда возвращает последние вставленные значения?
Первое, что я сделал, это поиск записи в моем первом столе. Если запись существует, таблица внешнего ключа заполняет значения. Мои начальные и внешние таблицы клавиш хорошо работают. Значения, соответствующие соответствующим компонентам, но не дают мне правильных значений. Любая помощь?
Это первичный ключ таблицы ссылок внешних ключей таблицы, которая является вторым столом.
Выбрать запрос:
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.
Почему вы проверяете только 'resultCounter == 1' вместо'> 0'? – callyalater
@callyalater Когда я использовал 'resultCounter> 0', все еще давал мне последние значения. Спасибо, что ответили. – Francisunoxx