2014-05-23 8 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 먼저 검색 한 다음 insert 문을 만듭니다. – 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

이 삽입 문이 제대로 채워 보인다 동안 매개 변수가없는 select 문을 실행하려고 시도하는 희귀 한 문이므로 pst.setString(12,memberType)이 실패합니다.

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

모든 매개 변수의 값을 모두 설정해야합니다.

+0

membertypeid를 가져 오는 데 다른 설명을 사용하는 것이 더 좋습니다. – Prabahar