Wenn ich versuche, einen Datensatz mit Prepared Statement auszuwählen, gibt er mir immer die zuletzt eingefügten Werte, die ich kürzlich hinzugefügt habe.Warum Select-Anweisung immer die zuletzt eingefügten Werte zurückgeben?
Zuerst was ich tun, ist einen Datensatz in meiner ersten Tabelle zu suchen. Wenn der Datensatz vorhanden ist, füllt die Fremdschlüsseltabelle die Werte auf. Meine Primär- und Fremdschlüsseltabellen funktionieren gut. Die Werte füllen sich entsprechend mit ihren entsprechenden Komponenten, aber es gibt mir nicht die richtigen Werte. Irgendeine Hilfe?
Dies ist der Primärschlüssel Tabelle Fremdschlüsseltabelle verweisen, die die zweite Tabelle.
Auswahlabfrage:
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
So was habe ich hier zu tun ist, um die SECTION_NAME
Spalte Fremdschlüsseltabelle verbinden mit Rechts Join. Wenn der Datensatz existiert, wird er die beiden Tabellen verbinden.
Code:
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
}
Wie Sie hier sehen können. In meinem ersten ResultSetmyFirstRs
Wenn ich ein vorhandenes SECTION_NAME
suchen, werden die Fremdschlüsselwerte aufgefüllt. Wenn etwas in meiner Schleife mich korrigiert. Danke im Voraus!
Aktualisierung!
Ich füge eine ORDER BY-Klausel in meine 2. Select Query ein. Denn ohne diese wird die Datenbank zurückzugeben, was es will, so was habe ich getan ist die Abfrage ändern und die ORDER BY-Klausel wie folgt hinzu:
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";
mich immer noch falsche Werte geben, wenn ich das Projekt. Ich habe versucht, dies in der NetBeans-Abfrage auszuführen und mir Werte in einer ASC-Reihenfolge zu geben.
Warum überprüfen Sie nur, ob 'resultCounter == 1' statt'> 0'? – callyalater
@callyalater Als ich 'resultCounter> 0' verwendet habe, gibt es immer noch einen letzten Wert. Danke für die Antwort. – Francisunoxx