# Datenzeile einer SQL-DB mit Java löschen



## Guest (21. Nov 2006)

Moin

Also, ich habe eine JTable, die Daten einer SQL-Datenbank ausgibt. Funktioniert alles sehr gut, man kann neue Einträge abspeichern usw.
Aber wie bekomme ich es hin, dass ein Datensatz gelöscht wird ? Wie sieht der Code aus ? Den SQL-Befehl suche ich nicht, sondern wie das überhaupt geht..
Mit dem MouseListener ? Wie bekomme ich das hin ?


```
if(e.getSource()== btnLÖSCHEN)
			{
				Connection conn = null; //Verbindung zum Server
				Statement stmt = null;  //die abzusetzende SQL-Anweisung
				try
				{
				Class.forName("com.mysql.jdbc.Driver").newInstance();
				Fehler.setText("Treiber OK.");
				conn = DriverManager.getConnection("jdbc:mysql://10.1.123.215/dvdverleih?user=software&password=verleih");
			  	Fehler.setText("Verbindung erhalten: " + conn.toString());
			    }
				 catch (Exception ex)
				  {
				  	Fehler.setText("Fehler beim Verbindungsaufbau!" + ex.toString()); 
				  } 
				try
				{
				WAS KOMMT HIER HIN ???
				}
				catch(Exception exe)
				{
					Fehler.setText("Fehler beim Importieren: " + exe.toString());
				} 
          }
   }

Danke schon mal !
```


----------



## SlaterB (21. Nov 2006)

hmm, 'WAS KOMMT HIER HIN ???' sieht genau nach der Stelle für den SQL-Befehl aus 

delete from tabelle where ..

--------

eine andere Frage ist vielleicht, wie du den Index aus der Tabelle kriegst 
oder auch wie du die Tabelle danach aktualisiert, so dass die eine Zeile entfernt ist,

dazu solltest du aber bedenken: das hat absolut gar nix mit Datenbanken zu tun,
genauso gut könntest du die Zeile auch einfach nur so aus der Tabelle löschen,
mit deiner Topicüberschrift und deinem Code verschreckst du alle Swing-Experten, die von DB keine Ahnung haben 

JTable hat Operation wie getSelectedRow,
zum Ändern der Tabelle benutze ein eigenen TableModel,
das ist aber ganz schön aufwendig zu lernen, da solltest du dir vorher Tutorials zu anschauen falls benötigt


----------



## Guest (21. Nov 2006)

Also,
das habe ich beigefügt :

```
try
				{
					 int selectedRow = tablesuche.getSelectedRow();
					 if(selectedRow != -1) { 
					 model.removeRow(selectedRow); 
					 String i = tablesuche.getValueAt(selectedRow, 0).toString();
					 stmt=conn.createStatement();
					 stmt.executeUpdate("DELETE FROM gebuehr WHERE GebuehrID = '"+i+"';");
	
					 }
```

Die Zeile wird zwar gelöscht, aber nach erneuter Ausgabe der Daten stehen auch die Datensätze drin, die ich gelöscht habe ! Heißt also dass die Daten aus der SQL-DB nicht gelöscht werden... was stimmt an dem SQL-Befehlt nicht ?


----------



## SlaterB (21. Nov 2006)

nun dann solltest du erstmal 
stmt.executeUpdate("DELETE FROM gebuehr WHERE GebuehrID = '"+i+"';"); 
für sich probieren, dann hat das ganze mit eine JTable nix zu tun,
es gilt also immer noch: nicht die Probleme vermischen 

--------

was ist denn GebuehrId für ein Typ? String oder doch eher int?
teste das doch erstmal ganz simpel ohne Tabelle:
erzeuge einen Datensatz mit Id '2006'
funktioniert in einer MySQL-Konsole oder irgendeinem anderen zur  Verfügung stehenden Programm
DELETE FROM gebuehr WHERE GebuehrID = '2006'
?

funktioniert es auch in deinem Java-Programm?
vielleicht doch eher 
DELETE FROM gebuehr WHERE GebuehrID = 2006
?

wenn das alls zufriedenstellend gelöst ist, und dein obiger Code noch nicht geht, dann schau mal was die JTabel da reinpfuscht,
z.B.

mit 
String st = "DELETE FROM gebuehr WHERE GebuehrID = '"+i+"';";
int count = stmt.executeUpdate(st); 
System.out.println("update: "+st+" --> "+count);

was kommt dabei raus?, ist der SQL-Befehl dort korrekt?


----------



## Leroy42a (21. Nov 2006)

```
"DELETE FROM gebuehr WHERE GebuehrID = '"+i+"';"
```

Laß dir den generierten String mal ausgeben und schicke
ihn mit einem SQL-Administrationstool an die DB.

Das ";" am Ende der SQL-Anweisung ist zumindest überflüssig.

Außerdem vermute ich, daß du im catch-Teile der try-Anweisung
den eventuellen Fehler nicht ausgibst.


----------

