Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 错误:索引参数超出范围_Java_Mysql_Netbeans_Combobox_Primary Key - Fatal编程技术网

Java 错误:索引参数超出范围

Java 错误:索引参数超出范围,java,mysql,netbeans,combobox,primary-key,Java,Mysql,Netbeans,Combobox,Primary Key,我想插入组合框中选定项的主键 但是我得到了这个错误参数索引超出了范围(12>参数数量为0)” 我真的不知道怎么解决这个问题 这是我的代码: String valueTrainer = "kosong"; try { String sql2 = "Insert into ahli (MemberID, TrainerID, Name, ICNumber, Address, Nationality," + "PhoneNumber, Email,

我想插入组合框中选定项的主键

但是我得到了这个错误
参数索引超出了范围(12>参数数量为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);
            }

虽然insert语句似乎已正确填充,但在While循环中,您很少尝试执行没有参数的select语句,因此
pst.setString(12,memberType)
失败

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

在执行查询之前,您应该已经设置了所有参数的所有值。

您没有正确使用
pst

除非正确使用并关闭了一条sql语句,否则不能在不同的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

您正在使用相同的pst对象检索membertypeid并执行插入。请检查您的逻辑…首先检索membertypeid,然后创建insert语句。最好使用其他语句来获取membertypeid。