2016-03-29 90 views
1

当我尝试使用Prepared Statement选择一条记录时,它总是给我一个最近插入的值,这是我最近添加的。为什么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列外键表。如果记录存在,它将加入这两个表格。

代码:

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外键值将填充。如果我的循环中的某些东西纠正我。先谢谢了!

更新!

我在我的第二个Select Query中添加了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 
} 
相关问题