2014-05-23 197 views
0

我要插入組合框錯誤:索引參數超出範圍

的所選項目的主鍵,但我得到這個錯誤Parameter index out of range(12 > number of parameter which is 0)

我真的不知道如何解決這個

這裏是我的代碼:

String valueTrainer = "kosong"; 
try 
{ 
    String sql2 = "Insert into ahli (MemberID, TrainerID, Name, ICNumber, Address, Nationality," 
         + "PhoneNumber, Email, EmergencyPerson, EmergencyContact, DateReg, MemberTypeID) " 
         + "values(?,?,?,?,?,?,?,?,?,?,?,?)"; 


       pst = conn.prepareStatement(sql2); 

       pst.setString(1, MemberIDTextField.getText()); 
       pst.setString(2, valueTrainer); 
       pst.setString(3, NameTextField.getText()); 
       pst.setString(4, jTextField1.getText()); 
       pst.setString(5, AddressTextArea.getText()); 

       //Nationality combo box 
       String nationalityList = NationalityComboBox.getSelectedItem().toString(); 
       pst.setString(6, nationalityList); 

       pst.setString(7, PhoneNumberTextField.getText()); 
       pst.setString(8, EmailTextField.getText()); 
       pst.setString(9, EmerContactPersonTextField.getText()); 
       pst.setString(10, EmerContactNumberTextField.getText()); 

       //Date Chooser 
       pst.setString(11, ((JTextField)MemberDateChooser.getDateEditor().getUiComponent()).getText()); 

       //membertype combobox 
       // problem start from here, I think.. 
       String memberTypeList = MemberTypeComboBox.getSelectedItem().toString(); 
       String sql1 ="Select MemberTypeID from jeniskeahlian where Type = '"+memberTypeList+"' " ; 
       pst = conn.prepareStatement(sql1); 

       rs = pst.executeQuery(); 

       while(rs.next()){ 

        String memberType = rs.getString("MemberTypeID"); 
        pst.setString(12, memberType); 

       } 

       pst.execute(); 

       JOptionPane.showMessageDialog(null, "New member has been added"); 

      } catch (SQLException | HeadlessException e) { 
       JOptionPane.showMessageDialog(null, e); 
      } 
+0

您正在使用相同的pst對象來檢索membertypeid並執行插入操作。檢查你的邏輯...首先檢索membertypeid,然後創建插入語句。 – wxyz

回答

0

您沒有正確使用pst

同一命名參考上的準備好的語句不能在不同的sql語句上使用,除非一個被正確使用和關閉。準備,設置,執行,關閉一個語句,然後在另一個語句上重複相同的操作。

更改您的代碼如下

try 
{ 
    String memberTypeList = MemberTypeComboBox.getSelectedItem().toString(); 
    String sql1 ="Select MemberTypeID 
        from jeniskeahlian 
        where Type = ? " ; 
    pst = conn.prepareStatement(sql1); 
    pst.setString(1, memberTypeList); 

    rs = pst.executeQuery(); 
    String memberType = ""; 
    while(rs.next()){ 
     memberType = rs.getString("MemberTypeID"); 
    } 
    rs.close(); 
    pst.close(); 

    String sql2 = "Insert into ahli (MemberID, TrainerID, Name, 
            ICNumber, Address, Nationality, 
            PhoneNumber, Email, EmergencyPerson, 
            EmergencyContact, DateReg, MemberTypeID) 
        values(?,?,?,?,?,?,?,?,?,?,?,?)"; 

    pst = conn.prepareStatement(sql2); 

    pst.setString(1, MemberIDTextField.getText()); 
    pst.setString(2, valueTrainer); 
    pst.setString(3, NameTextField.getText()); 
    pst.setString(4, jTextField1.getText()); 
    pst.setString(5, AddressTextArea.getText()); 

    //Nationality combo box 
    String nationalityList = NationalityComboBox.getSelectedItem().toString(); 
    pst.setString(6, nationalityList); 

    pst.setString(7, PhoneNumberTextField.getText()); 
    pst.setString(8, EmailTextField.getText()); 
    pst.setString(9, EmerContactPersonTextField.getText()); 
    pst.setString(10, EmerContactNumberTextField.getText()); 

    //Date Chooser 
    pst.setString(11, ((JTextField)MemberDateChooser 
           .getDateEditor() 
           .getUiComponent()).getText()); 
    pst.setString(12, memberType); 

    pst.execute(); 

    JOptionPane.showMessageDialog(null, "New member has been added"); 

} // try 
+0

感謝@ravinder – SyasyaAzizan

0

當你插入語句似乎正確填充,在while循環您很少嘗試執行沒有參數的select語句,因此pst.setString(12,memberType)失敗。

String sql1 ="Select MemberTypeID from jeniskeahlian where Type = '"+memberTypeList+"' " ; //no ? in this query 
0

在執行查詢之前,您應該已經設置了所有參數的所有值。

+0

更好地使用不同的語句來獲取membertypeids。 – Prabahar