#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 значение выпадающего списка выбиралось с его идентификатором