ошибка вставки данных в java netbeans и mysql

#java #mysql

#java #mysql

Вопрос:

Я новичок в изучении программирования, и я пытаюсь применить то, что я узнал, на примере приложения на Java, и я столкнулся с проблемой. Я надеюсь, что вы найдете решение, пожалуйста. Когда я вставляю данные в поле со списком (combo_produits), он не выдает мне указанное значение, в коде нет ошибок, но поле со списком не выдает нам желаемое значение, несмотря на использование функции getSelectedIndex() .

 
/*method of combobox combo_produits */
   private void combo_PRODUIT() {

       try {
           String qyP = "SELECT CONCAT(NOM_COM,'  ',lib_court,' ',DOSAGE ,' ',UNITE , ' ', CONDIT)AS DESIGNATION "
                     "FROM produit  JOIN forme USING(cd_forme) ";
           prs_sort = connectio.prepareStatement(qyP);
           rs_sort = prs_sort.executeQuery();
           while (rs_sort.next()) {
               combo_produits.addItem(rs_sort.getString("DESIGNATION"));

           }

       } catch (Exception exp) {
           JOptionPane.showMessageDialog(null, exp.getMessage());
       }

   }

/* button of insert */
    private void valider_bpActionPerformed(java.awt.event.ActionEvent evt) {                                           

       int pharID = 0;
       int donid = 0;
       int lotID = 0;
       int prodid= 0 ;

       try {
           String qr1 = "insert into tbl_pharmacien (NOM_PHARM) values ('"   combo_pharm.getSelectedItem()   "')";
           prs_sort = connectio.prepareStatement(qr1, prs_sort.RETURN_GENERATED_KEYS);
           prs_sort.executeUpdate();
           rs_sort = prs_sort.getGeneratedKeys();
           while (rs_sort.next()) {

               pharID = rs_sort.getInt(1);
           }

           String qr2 = "insert into donner_medic (PHARM_ID , DATE_ECHANDONN) values "
                     "('"   pharID   "', '"   new SimpleDateFormat("yyyy-MM-dd").format(date_prod_sort.getDate())   "' )";
           prs_sort = connectio.prepareStatement(qr2, prs_sort.RETURN_GENERATED_KEYS);
           prs_sort.executeUpdate();
           rs_sort = prs_sort.getGeneratedKeys();
           while (rs_sort.next()) {

               donid = rs_sort.getInt(1);

              
           }

           int index =combo_produits.getSelectedIndex();
           

           String qr3 = " insert into tbl_lot (NUM_ENR,PPA, QNT) values "
                     "('"  index    "', '"   txtf_ppa.getText()   "', '"   txt_Qnt.getText()   "' )";
           prs_sort = connectio.prepareStatement(qr3, prs_sort.RETURN_GENERATED_KEYS);
           prs_sort.executeUpdate();
           rs_sort = prs_sort.getGeneratedKeys();
           while (rs_sort.next()) {

               lotID = rs_sort.getInt(1);
           }

           String qr4 = "insert into tbl_donnelot (LOT_ID,DONN_ID) values ('"   lotID   "', '"   donid   "')";
           prs_sort = connectio.prepareStatement(qr4);
           prs_sort.executeUpdate();

       } catch (Exception exp) {
           JOptionPane.showMessageDialog(null, exp.getMessage());
       }

       Table_prod_sort();
   }                            

  

Комментарии:

1. Вы должны научиться правильно использовать подготовленные инструкции с параметрами для улучшения и очистки кода. Кроме того, вы проверили, что ваши sql-запросы нормально выполняются сами по себе с помощью клиента mysql?

2. Вы вставляете индекс выбранного элемента в свою базу данных? Это вряд ли имеет смысл. Итак, если это 1 зубная щетка, 4 обезболивающих средства и 6 кремов для рук, и я выбираю обезболивающее, тогда вы вставляете 1, потому что обезболивающее находится с индексом 1. Это то, что вы хотели сделать?

3. Все работает нормально, но решение находится передо мной, но для начала мне нужно время

4. Когда мы выбираем, например, обезболивающее средство с индексом 4, оно фактически находится в другой форме, называемой лекарственной формой, но в этой форме оно дает нам другое лекарство по индексу.

Ответ №1:

Например, давайте создадим compobox с именем ученика: сначала мы обрабатываем класс с именем ученика и идентификатором для него, и мы выполняем функции Setter, getter и Constructor . Во-вторых, мы создаем функцию для связи базы данных с классом учащихся, таким образом:

 public class class_array {
         private Connection co=get_connection.ConnDb() ;
  private  PreparedStatement prst ;
   private ResultSet res ;
    
     public HashMap<String, Integer> fillCombobox(){
        String sqls = "SELECT `ID_student`, `Name_student` FROM `student`";
    HashMap<String, Integer> hmp = new HashMap<String, Integer>();
       try {
           prst = co.prepareStatement(sqls);
           res = prst.executeQuery();
           student st ;
           while(res.next()){
               st = new student(res.getInt(1), res.getString(2));
               hmp.put(st.getName_stud(), st.getId_stu());
           }
       } catch (SQLException ex) {
           Logger.getLogger(student_f.class.getName()).log(Level.SEVERE, null, ex);
       }
    
    return hmp ;
    }}
  

В-третьих, в форме мы пишем функцию отображения содержимого compobox следующим образом :

 private void combo(){
        class_array std = new class_array();
     HashMap<String, Integer> hmp = std.fillCombobox();
        for (String cb :hmp.keySet()) {
            combo_st.addItem(cb);
        }
        
    }
  

И, наконец, как и в предыдущем примере, мы хотим использовать последний выбор combobox , поэтому мы пишем следующее:

  private void bp_valid_indexActionPerformed(java.awt.event.ActionEvent evt) {                                               
       
        class_array stb = new class_array();
        HashMap<String,Integer> has = stb.fillCombobox();
        int index = has.get(combo_st.getSelectedItem().toString()).toString();
    } 
  

Ответ №2:

Я нашел решение, и оно заключается в отображении содержимого выпадающего списка с привязкой его к номеру его идентификатора, чтобы при работе getSelectedItem значение выпадающего списка выбиралось с его идентификатором