# Datensatz aus Datenbank löschen



## maxth (21. Sep 2009)

Hallo, 

ich hab mal wieder ein Problem. Also ich habe eine GUI die mir datensätze aus einer Datenbank anzeigen kann. Jetzt möchte ich diese per Klick löschen, oder wenn sie Verändert werden müssen, verändern. 

Ich hab eine KLasse "ShowViewer" die mir die GUI bietet zum anzeigen, darauf befindet sich eine Toolbar für die Buttons. Dann habe ich eine Klasse "WohnungsVerwalter", diese Klasse holt mir die Datensätze aus der Datenbank. In dieser Klasse möchte ich auch, die Bearbeitungsmethode und die Löschmethode. 

Und ich hab eine KLasse Verbidnung die mir MEthoden zum Löschen und editieren bereit legen.


Ich hoffe ihr könnt mir helfen.


Klasse ShowViewer

```
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.JToolBar;
import javax.swing.SwingUtilities;
 
public class ShowViewer extends JPanel implements ActionListener{
    
    /**
	 * 
	 */
	

	WohnungVerwalter wohnung = new WohnungVerwalter(); 
    
    String iconsDirectory = "icons/";
    
    int counter; 
 
        
      private JTextField textField1;
      private JTextField textField2;
      
      
      
    
    public ShowViewer(){
        super(); 
        
       
        this.setLayout(new BorderLayout());
        
        JToolBar toolBar = new JToolBar();
        addButtons(toolBar);
        addTextFelder();
        toolBar.setFloatable(false);
        toolBar.setRollover(true);

        JPanel topPanel = new JPanel(new GridLayout(7, 5)); //dies ist ein Subcontainer
        for (int i = 0; i < 25; i++)
            topPanel.add( new JTextField("Feld Nr."+i) );
        
       this.add(topPanel, BorderLayout.CENTER); 

        
 
        
        this.add(toolBar, BorderLayout.SOUTH);
       
       //this.add(textField1, BorderLayout.CENTER);
        //this.add(textField2, BorderLayout.CENTER);
   
        
       // this.add(textField2, BorderLayout.SOUTH);
        
        
        
        
        
    }   
    
    public void addTextFelder (){
        textField1 = new JTextField();
        textField2 = new JTextField();
     
      
        
        
    }
    
    public void addButtons(JToolBar toolBar) {
        JButton button;
        button = createButton("links", "Zurück" );
        toolBar.add(button);
        button = createButton( "rechts", "Vorwärts" );
        toolBar.add(button);
        button = createButton("blume", "Bearbeiten");
        toolBar.add(button);
        button = createButton("delet", "Löschen");
        toolBar.add(button);
        
 
    }
 
    public JButton createButton(String actionCommand, String toolTipText) {
        String imgLocation = iconsDirectory + actionCommand + ".jpg";
        JButton button = new JButton();
        button.setActionCommand(actionCommand);
        button.setToolTipText(toolTipText);
        button.addActionListener(this);
        button.setIcon(new ImageIcon(imgLocation, actionCommand));
        
        return button;
            
    }
    
    
    
    
       public void showNext() {
            
            counter++;
            
            if (counter>=wohnung.list.size()) counter = 0;
            textField1.setText(wohnung.list.get(counter).getName());
            textField2.setText(wohnung.list.get(counter).getMieterName());
           
        
    }
        public void deleteCurrent(){
            
            String d;
            String s; 
            
            d = (wohnung.list.get(counter).getID());
            //vb.verbinden();
            
            s = "DELETE FROM `mkb`.`vermieter` WHERE `vermieter`.`ID` =" + d;
                
        }
        
        
        public void editCurrent(){
        	
        	
        }
        
        
      public void showLast() {
            
            counter--;
            
            if (counter<= 1) //counter = 0;
            textField1.setText(wohnung.list.get(counter).getName());
            textField2.setText(wohnung.list.get(counter).getMieterName());
            
 
        
        
    }
    
    public static void main (String[] args)
    {
        // man kann natürlich seine eigene JFrame-Klasse schreiben und diese hier
        // verwendent
        final JFrame myFrame = new JFrame("Fenstertitel");
        // Layouting des Frames: der ShowViewer ist Hauptkomponente und kommt in die Mitte
        myFrame.add( new ShowViewer(), BorderLayout.CENTER );
 
        // pack() setzt die Größe des Frames anhand des Inhaltes (daher PreferredSize von ShowViewer setzen
        myFrame.pack(); //oder setSize(800, 600);
        myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        // Anzeigen des Frames
        SwingUtilities.invokeLater(new Runnable()
        
        {
            public void run()
            {
                myFrame.setVisible(true);
            }
        });
    }
 
    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getActionCommand().compareTo("rechts") == 0)
            this.showNext();
 
        
    }}
```

Klasse Wohnungsverwalter


```
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
 

 
public class WohnungVerwalter   {
    
    String s;
   

   ArrayList<Wohnung> list = new ArrayList<Wohnung>();

    Verbindung vb = new Verbindung();
    
  
    
    public WohnungVerwalter() {
        
        vb.verbinden();
       
    int counter = 0;

             s = "SELECT * FROM vermieter";
             
             ResultSet r =  vb.execSql(s);
             
             try {
				while(r.next()) {
				  
					
					list.add(new Wohnung("ID: " + r.getString(1) ,"Wohnung: " + r.getString(1), "Name: " + r.getString(2)));
					
					
				 }
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
```


```
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class Verbindung {
	public static Connection con;
	
	public static Statement statement;
	
	public static ResultSet rs;
	
	private static final String className="com.mysql.jdbc.Driver";
	private static final String DB_URL= "jdbc:mysql://localhost/mkb";
	private static final String DB_USER = "root";
	private static final String DB_PASSWD = "";
	
	public void verbinden(){
		try{
			Class.forName(className);
		} catch (ClassNotFoundException e){
			System.out.println("JDBC driver not found.");
		}
		try{
			con = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWD);
		} catch(SQLException e){
			System.out.println("Error establishing connection: " + e.getMessage());
		}
	}
	
	public void trennen(){
		try{
			statement.close();
			con.close();
		}catch (SQLException e){
			System.out.println("ERROR closing connection: " + e.getMessage());
		}
	}
	
	public ResultSet execSql(String sql){
		try {
			statement = con.createStatement();
			ResultSet resultSet = statement.executeQuery(sql);
			return resultSet;
			
		} catch (Exception e) {
			// TODO: handle exception
		}
		
		return null;
	}
	
	public void update(String sql){
		try {
			statement = con.createStatement();
			statement.executeUpdate(sql);
			statement.close();
		} catch (Exception e) {
			// TODO: handle exception
		}
	}
}
```


----------



## SlaterB (21. Sep 2009)

besteht irgendeine Frage, ein Problem?
du kannst doch nicht nur deinen Code posten, bei dem zig Dinge falsch sein können


----------



## Landei (21. Sep 2009)

SlaterB hat gesagt.:


> besteht irgendeine Frage, ein Problem?
> du kannst doch nicht nur deinen Code posten, bei dem zig Dinge falsch sein können


Offensichtlich kann er. Was er _nicht_ kann, ist eine Antwort zu erwarten


----------



## maxth (21. Sep 2009)

Ohh Entschuldigung, das ist jetzt hab ich das wichtigste vergessen. 

Also ich hab die Probleme im ShowViewer und WohnungsVerwalter. In der Klasse ShowViewer habe ich eine Methode deleteCurrent() und ein editCurrent. Diese sollen den ausgewählten Datensatz löschen bzw. verändern. Das versuche ich anhand der Position von meinem Counter den  ich im ShowViewer habe ((wohnung.list.get(counter).getID()) nur wie übergebe ich diesen Wert an den Wohnungsverwalter?! und wie schreib ich das am besten das mir auch der Datensatz gelöscht bzw. geändert wird. 

Vielen Dank im vorraus.


----------



## SlaterB (21. Sep 2009)

> nur wie übergebe ich diesen Wert an den Wohnungsverwalter?!

ein Methodenaufruf?

> und wie schreib ich das am besten das mir auch der Datensatz gelöscht bzw. geändert wird. 

am besten korrekt

hmm, ich glaube ich kann dabei gar nicht richtig helfen, einfach nur 'wie mache ich etwas' birgt wohl keine konkreten Probleme


----------



## maxth (21. Sep 2009)

```
public void deleteCurrent(){
            
            String delete;
            String sql; 
            
            delete = (wohnung.list.get(counter).getID());// Wert der übergeben werden soll
            /
            

    // sql = "DELETE FROM `mkb`.`vermieter` WHERE `vermieter`.`ID` =" +     delete;
                
        }
```

Der SQL teil gehört natürlich in den WohnungsVerwalter teil. 

Im WohnungsVerwalter mache ich dann eine Methode zum löschen des Datensatzes und übernehme dann den Wert vom Counter aus dem ShowViewer. 
Ich weiß nicht wie ich den Wert am besten übergeben soll, und wie genau der Datenbankteil des Löschens funktioniert.


----------



## SlaterB (21. Sep 2009)

was ist denn so unverständlich an einem Methodenaufruf?
egal ob Datenbank, Datei, Web, einfache String-Bearbeitung,
egal in welcher Programmiersprache oder sonstigen Paradigma, das Ziel ist doch immer denkbar einfach

deleteCurrent() {
// 1. Information zusammenstellen, z.B. Id des Eintrag, DB-Verbindung
// 2. Löschen durchführen
// fertig
}

das ist wirklich schwer? ganz normal nachdenken,
der WohnungsVerwalter ist überhaupt keine Hürde dabei, 
genauso gut kann es 

deleteCurrent() {
// 1. Information zusammenstellen, z.B. Id des Eintrag
// 2. an WohnungsVerwalter Informationen übergeben, einfacher Methodenaufruf
// 3. Löschen (wahrscheinlich in WohnungsVerwalter) durchführen
// fertig
}

lauten,

wie man einen Datensatz genau per SQL löscht ist gewiss ein berechtigtes separates Problem,
aber da muss man auch die Muße haben, Tutorials durchzulesen 

Google
->
Datensätze löschen


----------

