# MySql DELETE Anweisung gibt Fehler zurück



## BlackScorp21 (10. Dez 2007)

Hi Leute! 
Habe ein Problem mit meinem Java Befehl und meiner mysql Datenbank.

Datenbankverbindung und alles steht. kann auch wie folgt Einträge machen.


```
String sqlQuery2 = "INSERT INTO schueler " +
				"			(schuelerID, name, vorname, klasse, abc)" +
				"			VALUES " +
				"			('"+id+"','"+name+"','"+vorname+"','"+klasse+"','"+abc+"');";
		try 
		{	stmt.executeUpdate(sqlQuery2);
		}
```

Anmerkung: id, name, vorname, klasse und abc sind bei den Values Strings bzw Integerwerte die Übergeben wurden.
Klappt!


Das Problem was ich habe ist, dass ich nicht verstehe warum mein DELETE Befehl nicht hinhaut:



> String sqlQuery = 	"DELETE * " +
> "			FROM schueler " +
> "			WHERE name = "+name+" " +
> "			AND vorname ="+vorname+";";
> ...



Auch hier werden die Attribute vorher übergeben und sollen dann in der mysql-Anweisung als Where Bedingung vorhanden sein.

Soweit ich weiß muss die MySQL Syntax doch so sein



```
DELETE * FROM [Tabelle] WHERE [SPALTE] = WERT
```

Stimmt doch oder?


Meine Fehlermeldung:


> com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '* 			FROM schueler 			WHERE name = Nachname 			AND vorname =Vorname' at line 1
> at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:936)
> at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2985)
> at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1631)
> ...



Hinweise auf Verdächtiges bitte hier posten! 

Danke!


----------



## HoaX (10. Dez 2007)

wieso liest du nicht nach? http://dev.mysql.com/doc/refman/5.0/en/delete.html

dein * muss da weg. oder meinst du man könne auch nur einzelne spalten so löschen? 

DELETE FROM tabelle WHERE ...


----------



## DocRandom (10. Dez 2007)

Hi!
Das Statement sollte lauten:

```
String sqlQuery = "DELETE * FROM schueler WHERE name = '"+name+"'AND vorname = '"+vorname+"'";
```
Und gelöscht wird dann mit:

```
stmt.execute(sqlQuery);
```
..und *nicht mit*:
	
	
	
	





```
stmt.executeUpdate(sqlQuery);
```

lg
DocRandom


----------



## ARadauer (11. Dez 2007)

@hoax: stimmt
@doc: mhn nein. aus der api:



> executeUpdate(String sql)
> Executes the given SQL statement, which may be an INSERT, UPDATE, or DELETE statement or an SQL statement that returns nothing, such as an SQL DDL statement.



also insert, update, delete -> executeUpdate, sonst -> execute


----------



## BlackScorp21 (11. Dez 2007)

Erst mal danke euch beiden.

Hatte irgendwie das SELECT * im Kopf! Keine Anhnung warum ich das bei DELETE so machen wollte.

Probiere das heute Abend mal so! 

Danke


----------



## DonAqua (7. Feb 2008)

ARadauer das ist sorry wenn ich es so ausdrücke schwachsinn was du schreibst. Du kannst den delete auch micht execute absetzten. executeUpdate liefert dir nur bestimmte parameter zurück. Z.B. ob überhaupt was gelöscht wurde etc.


----------



## Tobias (7. Feb 2008)

Oh, DAS kann ich leiden, wenn Gäste meinen hier rumpissen zu müssen. ARadauer hat recht, wenn er DocRandom dahingehend korrigiert, das ein DELETE-Statement durchaus mit executeUpdate() abgeschickt werden kann. Das das NICHT mit execute() geht, wurde überhaupt nicht gesagt.

Und jetzt geh spielen.


----------



## thE_29 (7. Feb 2008)

Das kommt auf die DB drauf an!

Manche DBs können/mögen DELETE * FROM manche reagieren aber allergisch auf den *

Und es ist egal ob execute oder executeUpdate()! (Hauptsache kein executeQuery())


----------

