JComboBox Помогите удалить данные из базы данных - PullRequest
2 голосов
/ 16 мая 2011

У меня есть таблица в базе данных employee, состоящая из двух столбцов ID и NameLastName .

Я прибыл, чтобы добавить данные во втором столбце в JComboBox, как на снимке вниз!

enter image description here

Теперь, как я могу удалить выбранного сотрудника в JComboBox из БД?

Я подумал добавить идентификатор с таким именем I122-Name и использовать метод split для его извлечения, но я не хочу показывать идентификатор.

Есть ли способ связать с каждым именем в JComboBox скрытое значение, содержащее идентификатор сотрудника?

Ответы [ 4 ]

4 голосов
/ 16 мая 2011
  • Создайте объект Employee с обоими полями.
  • Переопределить метод toString () для вывода имени сотрудника.
  • Поместите объекты Employee в JComboBox, и имя будет отображено, но вы можете привести выбранный объект к Employee и извлечь идентификатор.
3 голосов
/ 16 мая 2011

Вы можете попробовать это:

Создайте класс Employee с именем поля и идентификатором, а затем создайте класс, который реализует ListCellRenderer и расширяет JLabel.Добавьте этот класс как Renderer к вашему JComboBox.Теперь вы можете установить имя как текст в JLabel. Теперь, когда вы получаете доступ к элементу comboBox, он возвращает вам JLabel, и вы можете получить имя в качестве видимого значения и идентификатор в качестве скрытого значения от того, которое вы установили в JLabel.

Метод JComboBox getSelectedItem() возвращает объект, который можно привести к любому объекту, который был помещен в комбинированный список.Чтобы получить компонент, используемый для визуализации элементов, вызовите getRenderer().

Примечание: - Вы можете использовать другой компонент, кроме JLabel.


Демонстрация: -

public class ComboRenderer extends JLabel implements ListCellRenderer{
    @Override
    public Component getListCellRendererComponent(JList list, Object value, int index,
            boolean isSelected, boolean cellHasFocus) {

        if(value != null){
            Employee emp = (Employee) value;
            setText(emp.getName());
            return this;
        }
        return null;
    }

}

Теперь, когда вы хотите добавить элемент в comboBox, используйте combo.addItem(empObject);.Он будет отображать имя сотрудника в comboBox, а когда вы выполните getSelectedItem(), он вернет вам объект сотрудника, и вы получите имя и идентификатор, оба принадлежащие этому объекту emp.

1 голос
/ 20 марта 2013

вот простой код, который удалит всю строку в базе данных.

    try{
      String str;
      con = DriverManager.getConnection("jdbc:mysql://:3306/database","user","password");
      stat = con.createStatement();
      ResultSet rs = stat.executeQuery("SELECT column_name FROM table_name where column_name = '"+jComboBox1.getSelectedItem().toString()+"';");
      while(rs.next()){
         Str = rs.getString(column_name);
      }
      stat.executeUpdate("DELETE FROM table_name where column_name = +"str"+");
    }
    rs.close();
    stat.close();
    con.close();
    catch(Exception e){
      System.out.println(e);
    }
1 голос
/ 16 мая 2011

Я не хочу показывать ID.

На этот вопрос уже получено 2 хороших ответа, но я хотел бы добавить этот 3-й, если только для того, чтобы ответить на вопрос о том,показать удостоверение личности (которое не было частью вопроса, но должно было быть).

Снимок экрана

Какой Джон Смит вы собираетесь уволить?

enter image description here

SackEmployee.java

import java.awt.*;
import javax.swing.*;

class SackEmployee {
    public static void main(String[] args) {
        SwingUtilities.invokeLater( new Runnable() {
            public void run() {
                Employee[] workforce = {
                    new Employee("Ali Ben Messaoud", 9823),
                    new Employee("Jane Brewer", 6348),
                    new Employee("John Smith", 1247),
                    new Employee("John Smith", 4385)
                };

                JComboBox employeeCombo = new JComboBox(workforce);

                EmployeeCellRenderer employeeCellRenderer = new EmployeeCellRenderer();
                employeeCombo.setRenderer(employeeCellRenderer);

                int result = JOptionPane.showConfirmDialog(
                    null,
                    employeeCombo,
                    "Fire Employee?",
                    JOptionPane.OK_CANCEL_OPTION);
                // cast selected item back to Employee.
                Employee employee = (Employee)employeeCombo.getSelectedItem();
                System.out.println( "Fire '" + employee + "' now?" );
                System.out.println( "Proceed: " + (result==JOptionPane.OK_OPTION) );
            }
        });
    }
}

class Employee {

    int id;
    String name;

    Employee(String name, int id) {
        this.id = id;
        this.name = name;
    }

    public String getIdString() {
        return "ID-" + id;
    }

    public String toString() {
        return getIdString() + ": " + name;
    }
}

class EmployeeCellRenderer implements ListCellRenderer {

    JLabel label = new JLabel();

    public Component getListCellRendererComponent(
        JList list,
        Object value,
        int index,
        boolean isSelected,
        boolean cellHasFocus) {

        Employee employee = (Employee)value;
        // distinguish between people of same name by adding ID.
        label.setText(employee.name + " (" + employee.getIdString() + ")");

        return label;
    }
}

EG I / O

prompt>java SackEmployee
Fire 'ID-9823: Ali Ben Messaoud' now?
Proceed: false

prompt>java SackEmployee
Fire 'ID-1247: John Smith' now?
Proceed: true

prompt>java SackEmployee
Fire 'ID-4385: John Smith' now?
Proceed: false

prompt>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...