AWT Markierte Zeile jList aus mySQL DB löschen

Nordm8

Neues Mitglied
Hallo an alle. 🙂

Da ich mich seit kurzen mit Java beschäftige und einge Startschwierigkeiten habe, habe ich mich hier angemeldet. Ich denke hier finde ich sicher die nötige Hilfe 😀

Gleich eine Frage:

Habe ein DefaultListModel welches Datensätze aus einer mySQL Db ausliest und in der Liste anzeigt.
Ich will einen dieser Datensätze markieren und mithilfe eines DELETE Buttons aus der Liste UND DB löschen.
Komme hier aber nicht mehr weiter.

DB Verbindung....

Java:
 String driver = "com.mysql.jdbc.Driver";
            String connection = "jdbc:mysql://localhost:3306/abschluss";
            String user = "root";
            String password = "";
            Class.forName(driver);
            Connection con = DriverManager.getConnection(connection, user, password);
            
            stmt = con.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE );
            String sql = "Select * from kontakte";
            rs = stmt.executeQuery(sql);

Liste füllen...

Java:
 while(rs.next()){
                id              = rs.getString("kontaktID");
                String Name     = rs.getString("Name");
                String NachName = rs.getString("Nachname");
                String Strasse  = rs.getString("Strasse");
                String Ort      = rs.getString("Ort");
                String Mobil    = rs.getString("Mobil");
                String Telefon  = rs.getString("Telefon");
                String Privat   = rs.getString("privat");
                
                if (Privat.equals("yes")){
                  PartnerArt = "privat";
                } else PartnerArt = "geschäftlich";
                
                
                m.addElement(Name + " " + NachName + ", " + Strasse + ", " + Ort + ", " + Mobil + ", " + Telefon + ", " + PartnerArt);
                
               
            }


Am Trigger des Delete Buttons hab ich das eingetragen....

Java:
  Object sel =null;

        int[] selectedIx = this.jList1.getSelectedIndices();      

        for (int i = 0; i < selectedIx.length; i++) {
            sel = jList1.getModel().getElementAt(selectedIx[i]);
        }

        System.out.println(sel);
    }

Dh ich bekomme schon mal den zu löschenden/markierten Datensatz raus. Was mir fehlt ist aber erstens die ID um den Datensatz in der mySQL Db zu finden und zu löschen UND mir fehlen die Befehle dazu.

Zur Info: ID darf in der Liste nicht angezeigt werden.

Bitte um Hilfe.

Nord
 
Was mir fehlt ist aber erstens die ID um den Datensatz in der mySQL Db zu finden und zu löschen

Du solltest dein Model überdenken. Ich schreibe eigentlich immer ein eigenes Model, in dem alle Daten zusammen in EINEM Objekt stehen.

Das wäre bei dir ein Objekt Kontakt (?) mit den Attributen Name,NachName,Strasse,Ort,Mobil,Telefon,Privat. Aber, wichtig, auch die ID des Datensatzes aus der DB. (Variable beginnen übrigens mit einem Kleinbuchstaben).

Somit kannst du aus dem selektierten Eintrag im Model nachschauen und hast die ID des Kunden.

Dann musst du "nur" noch den Datensatz löschen
SQL:
delete kontakte where id=<deine ID aus dem Model>
 
Zuletzt bearbeitet:
Ich behaupte, das eine Liste nicht so gut geeignet ist, da du ja die Informationen in einer Zeile packen musst. Hier ist wohl eine JTable sinnvoller.

Ich habe mal ein kleines Beispiel für JList zusammengebastelt, was zeigt, was ich meine. Derzeit wird "nur" id, name und Nachname gezeigt, weil ich das sonst unleserlich finde.

Wenn du auf einen Kontakt klickst, wird das delete Kommando angezeigt, welches du auf der DB ausführen müsstest.
Java:
package list;

import java.awt.BorderLayout;

public class Main {

    public static void main(String[] args) {
	final JFrame frame = new JFrame("Turtle");
	frame.getContentPane().setLayout(new BorderLayout());
	frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	Kontakt[] memoryKontakte = new Kontakt[] { new Kontakt(12, "Turtle", "Turtle", "strasse", "ort", "mobil", "telefon", "privat"),
		new Kontakt(34, "Nordm8", "Nordm8", "strasse", "ort", "mobil", "telefon", "privat"), };
	final JList<Kontakt> listKontakte = new JList<Kontakt>(memoryKontakte);
	frame.getContentPane().add(listKontakte, BorderLayout.CENTER);
	JPanel panel = new JPanel();
	frame.getContentPane().add(panel, BorderLayout.SOUTH);
	panel.setLayout(new BorderLayout(0, 0));
	JButton btnSaveButton = new JButton("Save");
	btnSaveButton.addActionListener(new ActionListener() {

	    @Override
	    public void actionPerformed(ActionEvent e) {
		Kontakt selectedValue = listKontakte.getSelectedValue();
		if (selectedValue != null) {
		    JOptionPane.showMessageDialog(frame, "DELETE kontakte WHERE id=" + selectedValue.getId());
		}
		System.out.println(selectedValue);
	    }
	});
	panel.add(btnSaveButton, BorderLayout.NORTH);
	frame.pack();
	frame.setVisible(true);
    }
}
Und eine Kontakte-Klasse brauchts auch
Java:
package list;

import java.math.BigInteger;

public class Kontakt {
    private int id;
    private String name;
    private String nachName;
    private String strasse;
    private String ort;
    private String mobil;
    private String telefon;
    private String privat;

    public Kontakt(int id, String name, String nachName, String strasse, String ort, String mobil, String telefon, String privat) {
	this.id = id;
	this.name = name;
	this.nachName = nachName;
	this.strasse = strasse;
	this.ort = ort;
	this.mobil = mobil;
	this.telefon = telefon;
	this.privat = privat;
    }

    @Override
    public String toString() {
	return "" + id + ":" + name + ":" + nachName;
    }

    public int getId() {
	return id;
    }

    public void setId(int id) {
	this.id = id;
    }

    public String getName() {
	return name;
    }

    public void setName(String name) {
	this.name = name;
    }

    public String getNachName() {
	return nachName;
    }

    public void setNachName(String nachName) {
	this.nachName = nachName;
    }

    public String getStrasse() {
	return strasse;
    }

    public void setStrasse(String strasse) {
	this.strasse = strasse;
    }

    public String getOrt() {
	return ort;
    }

    public void setOrt(String ort) {
	this.ort = ort;
    }

    public String getMobil() {
	return mobil;
    }

    public void setMobil(String mobil) {
	this.mobil = mobil;
    }

    public String getTelefon() {
	return telefon;
    }

    public void setTelefon(String telefon) {
	this.telefon = telefon;
    }

    public String getPrivat() {
	return privat;
    }

    public void setPrivat(String privat) {
	this.privat = privat;
    }

}
 

Zurück
Oben