2016-03-29 12 views
1

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?

1st Table

Dies ist der Primärschlüssel Tabelle Fremdschlüsseltabelle verweisen, die die zweite Tabelle.

2nd Table

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.

enter image description here

+0

Warum überprüfen Sie nur, ob 'resultCounter == 1' statt'> 0'? – callyalater

+0

@callyalater Als ich 'resultCounter> 0' verwendet habe, gibt es immer noch einen letzten Wert. Danke für die Antwort. – Francisunoxx

Antwort

0

Ich habe gerade eine einfachste Lösung. Ich habe die beiden Tische mit Right Join verbunden.

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 
} 
Verwandte Themen