Ausgewählten Jtable Eintrag aus Db löschen

AML

Mitglied
Hallo zusammen..

Habe eine kleine Frage und konnte mit Googeln keine genaue Antwort finden.

Also Folgendes: Ich habe einen Frame wo ich Benutzer verwalten kann. Ist eine MSAcces datenbank mit

User_id
User
pass
userrole

Jetzt möchte ich einen Button der einen ausgewählten Eintrag in einer JTable löscht, bisher habe ich folgenden Code der bei dem Buttonklick aufgerufen wird.:

Java:
     private void DeleteFromTable(){
         
         
    DefaultTableModel model = (DefaultTableModel) jTable1.getModel();
    int numRows = jTable1.getSelectedRows().length;
    for(int i=0; i<numRows ; i++ ) model.removeRow(jTable1.getSelectedRow());
         
     }

Das heisst ich kann die Rows der Jtable bereits einwandfrei löschen. Logischerweise werden so aber nur die JTable Rows gelöscht aber nicht die Datenbankeinträge selber.

Aber wie genau teil ich das jetzt dem Button mit dass er die ausgewählte Reihe auch in der Datenbank löschen soll?
Also dass er Quasi die User_ID aus dem ausgewählten Jtable eintrag ausliest und in einem nächsten SQL Befehl löscht?
 
C

Camino

Gast
Na ja, du musst natürlich auch noch gleichzeitig eine Verbindung zur Datenbank herstellen und einen SQL-Befehl dorthin schicken (der in etwa so ähnlich aussehen könnte: "DELETE FROM table WHERE ID = id"). Kommt halt auch drauf an, wie du die Daten in die Tabelle gebracht hast. Am besten wäre ein eigenes TableModel mit Objekten, bei denen du dann über die selektierte Zeile zu dem Objekt kommst und dort die ID auslesen kannst, die gelöscht werden soll.
 
Zuletzt bearbeitet von einem Moderator:
S

SlaterB

Gast
> Aber wie genau teil ich das jetzt dem Button mit

so genau wie es nur geht, mit einer Code-Zeile nach der anderen:
int userId = ..;
DB.delete(userId);
usw.
die Stelle im Code für die neuen Zeilen dürfte klar sein

was du inhaltlich an Code brauchst, kann niemand wissen,
wenn du eine bestimmte Frage hast, etwa 'wie bekomme ich aus dem Model die Daten aus Zeile x, vor dem remove'
dann stelle sie ruhig auch
 

AML

Mitglied
Ok, also hier einmal meine Connect methode:

Java:
public void connect()
    {
       try
       {
           //Konfiguration der DB
           //Herstellen der Verbindung zur verschlüsselten Datenbank
           String driver = "sun.jdbc.odbc.JdbcOdbcDriver";
           Class.forName(driver);
           
           String db = "jdbc:odbc:User";

           lManager.getConfigData();
           StringBuilder lConnectionString = new StringBuilder();
           lConnectionString.append( "jdbc:odbc:DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" );    
           lConnectionString.append( lManager.getDbPath() );
           lConnectionString.append( ";PWD=*****" );
           System.out.print( lConnectionString.toString() );
           con = DriverManager.getConnection
           ( lConnectionString.toString() ); 
           st = con.createStatement();
       }
       catch(Exception ex){
           
       }
           
    }

Danach die Methoden.

Java:
     private void UpdateTable(){
         
         
         String sqlupdate = "Select * from User";
         
         try{
             pst = con.prepareStatement(sqlupdate);
             rs = pst.executeQuery();
             jTable1.setModel(DbUtils.resultSetToTableModel(rs));
             
         }
         catch(Exception e){
             
         }
         
     }
     
     private void DeleteFromTable(){
         
         
    DefaultTableModel model = (DefaultTableModel) jTable1.getModel();
    int numRows = jTable1.getSelectedRows().length;
    for(int i=0; i<numRows ; i++ ) model.removeRow(jTable1.getSelectedRow());
         
     }

Beim öffnen des Frames wird dann UpdateTable(); ausgeführt:

Java:
    private void formWindowOpened(java.awt.event.WindowEvent evt) {
        
        UpdateTable();
    }


  private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
       try
       {       
               
       }
        catch(Exception e){
            
        }
        
        DeleteFromTable();
    }


    }

Aber für das Action Event beim Buttonklick bin ich noch etwas hilflos. Beim Button Hinzufügen habe ich keine Probleme und habe es so gelöst:
(Sind vorerst nur Textfields zum probieren, wird noch geändert)

Java:
 private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
        try
                {
                    
                    String user = jTextField1.getText().trim();
                    String pass = jTextField2.getText().trim();
                    String userrole = jTextField3.getText().trim();
                    String sql = ("INSERT INTO User (user, pass, userrole)"
                            + " VALUES ('" + user + "','" + pass + "','"+ userrole+"') ");
                                                      
                    st = con.createStatement();
                    
                    st.executeUpdate(sql);
                    
                     JOptionPane.showMessageDialog(null, "Benutzer wurde erstellt");
                }
                
          catch (Exception e)
        {
            e.printStackTrace();
        }                             
    }

Aber irgendwie steh ich da bei der Deletefunktion gerade etwas auf dem Schlauch.

Konkret: Wenn ich den Löschen Button klicke möchte ich dass die User_ID des selektierten JTable Eintrags ausgelesen wird und der Eintrag nicht nur von der JTable (Status Quo), sondern auch in der Datenbank gelöscht wird.


Habe mal einen Screenshot angehängt damit man sich darunter was vorstellen kann.
 

Anhänge

  • verwaltung.png
    verwaltung.png
    11,8 KB · Aufrufe: 32
S

SlaterB

Gast
> Konkret: Wenn ich den Löschen Button klicke möchte ich [..]

diese Information war schon bekannt, konkret beschreibst du nach wie vor nicht, welche Art von Problemen du damit hast,
Erwähnung von Schläuchen und anderen Gartengeräten bringt da auch nix,

die erste Aufgabe ist doch ziemlich klar, anhand der Selektion aus dem Tabellen-Modell eine UserId zu bestimmen,
machen oder nicht, fragen oder nicht, aber es muss doch irgendeine Idee oder konkretes Hindernis geben?

das schöne an einem Forum ist, dass du alle Zeit der Welt hast, nachzudenken und Sätze zu formulieren
 
C

Camino

Gast
Java:
jTable1.setModel(DbUtils.resultSetToTableModel(rs));

Wo kommt denn dieses DbUtils in der Methode UpdateTable() her? Das steckt das ResultSet ins TableModel. Vielleicht gibt es da ja auch eine Methode, mit welcher die geänderte Table bzw. das Model zurück in die DB geschrieben werden kann.
 

AML

Mitglied
> Konkret: Wenn ich den Löschen Button klicke möchte ich [..]
die erste Aufgabe ist doch ziemlich klar, anhand der Selektion aus dem Tabellen-Modell eine UserId zu bestimmen,
machen oder nicht, fragen oder nicht, aber es muss doch irgendeine Idee oder konkretes Hindernis geben?

Viele Dinge die für dich klar sind, sind es für mich leider noch lange nicht ;)

Also hier mal meine ersten Versuche.

Java:
       try
       {       
               Integer userid = (Integer) jTable1.getValueAt(0, 0);
               String sqldel = ("Delete from User where id ='" 
                       + userid +"");
               
               st = con.createStatement();
               
               st.executeUpdate(sqldel);   
       }
        catch(Exception e){
            
        }
        
        DeleteFromTable();

Ich weiss also quasi überhaupt nicht mit was ich anfangen soll. Wie lese ich den Wert aus der ID-Wert der selektieren Tabelle aus? Dürfte ja irgendwas mit getSelectedRow sein aber ich bin leider noch ein ziemlicher Anfänger in Sachen Java und Jtables..
 
S

SlaterB

Gast
getSelectedRow() hattest du doch bisher schon im Code,
an JTable.getValueAt() hatte ich selber gar nicht gedacht, würde beim Model was abfragen, aber wenn es so geht warum nicht?

getValueAt() benötigt row + column, getSelectedRow() liefert hoffentlich die Zeile, die Spalte musst du selber wissen,
kommt da nichts bei raus? bisschen ausprobieren ist auch immer erlaubt

der Rest sieht ja schon nach ein bisschen aus, wobei die Connection con sicher noch irgendwo her zu holen ist usw.,
immer weiter, immer weiter
 

AML

Mitglied
Habe es jetzt alles in die Methode DeleteFromTable() zusammengefügt:

Java:
     private void DeleteFromTable() throws SQLException{
         
         
    DefaultTableModel model = (DefaultTableModel) jTable1.getModel();
    int numRows = jTable1.getSelectedRows().length;
    int userid = (int) jTable1.getValueAt(0,1);
    
    for(int i=0; i<numRows ; i++ ) model.removeRow(jTable1.getSelectedRow());
    
    String sqldel = ("Delete from User where id ='" 
                       + userid+"");
               
               st = con.createStatement();
               
               st.executeUpdate(sqldel);   
               System.out.print(numRows);
         
     }

Der erste Teil funktioniert wie gesagt einwandfrei. Beim Öffnen des Frames wird der Table mit den vorhandenen Daten angezeigt und wenn ich auf löschen drücke verschwinden die Einträge. Beim erneuten Öffnen sind die Einträge aber wieder vorhanden da sie nicht aus der db gelöscht werden können. Der Fehler liegt also irgendwo bei meiner SQL abfrage oder bei "int userid =.."
 
S

SlaterB

Gast
> int userid = (int) jTable1.getValueAt(0,1);
enthält nirgendwo getSelectedRow(), ist da noch mehr zu zu sagen?

wenn du eine Zahl 700 addieren willst, musst du auch +700 schreiben, nicht +48,
das ist nun keine Hochkunst, die erst erklärt werden muss

das SQL ist auch noch falsch, aber da kommen sicher Fehlermeldungen,
das musst du schon alles weitgehend selber schaffen,
du kannst kaum für jeden schief eingehauenen Nagel im Baumarkt nachfragen
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
R SQL Abfrage, je nach ausgewählten Parametern Datenbankprogrammierung 11
B Wie kann ich eine Jtable mit Inhalt einer SQL Abfrage füllen Datenbankprogrammierung 14
H Tabellenspalte in JTable in der falschen Reihenfolge Datenbankprogrammierung 10
M Datenbank editierbach machen in JTable Datenbankprogrammierung 13
L jTable mit Datenbankwerten befüllen Datenbankprogrammierung 7
S MySQL JTable zeigt nach Datenbankabfrage eine Spalte zu viel an Datenbankprogrammierung 0
A SQLite jTable binding mit Netbeans Datenbankprogrammierung 11
C MySQL JTable in JScrollPane nach insert aktualisieren Datenbankprogrammierung 3
M MySQL SQL Abfrage in JTable mit Berechnung Datenbankprogrammierung 3
L JTable-DB: Letzter wert wird nicht angezeigt. Datenbankprogrammierung 0
S MySQL jPMdbc&MySQL = Fehlerhafte Umlaute in JTable Datenbankprogrammierung 0
R HSQLDB Tabelle in JTable übertragen Datenbankprogrammierung 3
P MySql daten in leeren jtable übertragen Datenbankprogrammierung 5
D von Datenbank in JTable füllen Datenbankprogrammierung 16
D JTable stellt DB da Datenbankprogrammierung 24
D DB Tabelle in JTable anzeigen - Probleme Datenbankprogrammierung 8
Rudolf MySQL MySQL Tabelle mit Fremdschlüsseln in JTable darstellen Datenbankprogrammierung 5
E csv datei in JTable einlesen Datenbankprogrammierung 3
D ArrayIndexOutOfBoundsException bei Update von JTable und Model Datenbankprogrammierung 13
E JTable mit Datenbankinhalt befüllen Datenbankprogrammierung 4
N MySQL MYSQL Inhalt an JTable übergeben. Datenbankprogrammierung 11
0 ResultSet in JTable Datenbankprogrammierung 14
M MySQL Table in Jtable integrieren Datenbankprogrammierung 26
B MySQL Row und ColumnIndex aus einer JTable (mysqlDb) selectieren Datenbankprogrammierung 18
M JTable änderung sofort auch in MySQL ändern. Datenbankprogrammierung 7
X Daten einer DatenbankTabelle in JTable darstellen Datenbankprogrammierung 13
M SQL Abfrage in jTable einfügen Datenbankprogrammierung 8
oliver1974 JPA, JTable und 2 DB-Tabellen... Datenbankprogrammierung 2
K JTable mit JDBC verbinden Datenbankprogrammierung 5
D PostgreSQL Von JTable -> Datenbank Datenbankprogrammierung 6
T Recordsets in eine JTable einlesen mit Netbeans 6.0 Datenbankprogrammierung 2
P JTable mit Daten aus MySQL befüllen mit Filterung Datenbankprogrammierung 3
N ID des Datensatzes aus JTable holen (nicht Index!) Datenbankprogrammierung 4
J Von Datenbank --> Vector --> JTable Problem Datenbankprogrammierung 6
J Klasse für Datensatzblättern in Verbindung mit JTable gesuch Datenbankprogrammierung 6
J jTable aktualisieren! Datenbankprogrammierung 2
V DB-Inhalt in JTable Datenbankprogrammierung 5
D Daten von Datenbank in JTable füllen... Datenbankprogrammierung 3
G JTable befüllen Datenbankprogrammierung 5
S Den letzten Eintrag aus Datenbank ziehen (Oracle SQL Dev.) Datenbankprogrammierung 14
D SQLite INSERT OR REPLACE INTO macht neuen Eintrag?! Datenbankprogrammierung 2
M Derby/JavaDB Neu geschriebener Eintrag per UPDATE lässt sich nicht unmittelbar abrufen Datenbankprogrammierung 2
G 2 Tabellen und ein spezieller Eintrag Datenbankprogrammierung 2
J Java DB Neuen Eintrag am Anfang der Table Datenbankprogrammierung 6
E ClassNotFoundException bei verschiedenen MS SQL Treibern trotz Classpath-Eintrag Datenbankprogrammierung 5
C Programm wird nach DB-Eintrag nicht weitergeführt Datenbankprogrammierung 5
M OutOfMemoryException obwohl nur 1 Eintrag abgefragt wird Datenbankprogrammierung 7
C H2 Letzten Eintrag auslesen Datenbankprogrammierung 6
N batchupdate, es wird nur der letzte Eintrag eingetragen Datenbankprogrammierung 5
G Existiert schon ein DB- Eintrag Datenbankprogrammierung 1
S MySQL Kein DB-Eintrag Datenbankprogrammierung 4
prakdi einzelnen SQL Eintrag finden der "update" enthält Datenbankprogrammierung 3
K Wird auf den Eintrag referenziert? Datenbankprogrammierung 4
E Aus einer Tabelle Zeilen mit doppeltem Eintrag holen? Datenbankprogrammierung 4
B Datenbank Abfrage: Es fehlt immer ein Eintrag! Datenbankprogrammierung 7
B Eintrag in der MySQL Datenbank eintragen? Datenbankprogrammierung 2
G Policy Eintrag für SQL Zugriff im Netzwerk Datenbankprogrammierung 10
T [jdbc] einen Eintrag aus mehreren Tabellen löschen (Batch) Datenbankprogrammierung 3
J Eintrag aus der Spalte auswählen Datenbankprogrammierung 3

Ähnliche Java Themen

Neue Themen


Oben