# Duplicate entry



## alfy7 (30. Jan 2009)

hallo 

ich arbeite jetzt an einer Anwendund, die die Daten in eine MySQL DB speichern soll.
die Methode zum Speichern sieht so aus:


```
public boolean saveArtikel(Artikel artikel) {
		String query = "INSERT INTO `" + TABELLE_ARTIKEL
				+ "` ( `ID_artikel` , `Bezeichnung` , `Beschreibung` ,"
				+ " `URL` , `URLthumb` , `VerfuegbarkeitID` , `PreisNetto` ,  "
				+ " `ID_Ordner` ) VALUES (LAST_INSERT_ID( ) , '"
				+ artikel.getBezeichnung() + "',  '"
				+ artikel.getBeschreibung() + "', '"
				+ artikel.getUrlAlsString() + "', '"
				+ artikel.getUrlThumbAlsString() + "', '"
				+ artikel.getVerfuegID() + "', '" + artikel.getPreis() + "', '"
				+ artikel.getIdOrdner() + "') ;";
		
		tabellePruefen(TABELLE_ARTIKEL);
		System.out.println(query);
		try {
			con.executeUp(query);

		} catch (SQLException e) {
			e.printStackTrace();
		}
		con.closeStatement();
		return false;
	}
```

das Problem ist dass es immer nur erste Datensatz gespeichert wird  und beim zweitem kommt Fehler: Duplicate entry '131' for key 1
mit dem LAST_INSERT_ID( ) sollte es doch immer neue ID vergeben werden, tut es aber nicht.

weiss vielleich jemand woran es liegen könnte?
wäre sehr dankbar für jede Hilfe

mfg alfy7


----------



## SlaterB (30. Jan 2009)

findest du nicht, dass LAST_INSERT_ID() genau das tuen sollte, was es im Namen verspricht?
der Name heißt übersetzt 'gib die letzte eingefügte Id', nicht 'gib eine neue freie Id fürs nächste Einfügen'

+1 könnte Wunder wirken..


----------



## HoaX (30. Jan 2009)

nein, du hast last_insert_id() nicht verstanden. das liefert die zuletzt vergebene, wie der name schon sagt, klar dass dann der fehler kommt ...


----------



## alfy7 (30. Jan 2009)

danke für die schnellen Antworten

vielleicht habe ich die funktion wirklich nicht richtig verstanden, nur dass es bei anderen 2 methoden, die genauso datensätze in die Tabelle speichern, funktioniert  LAST_INSERT_ID( ) ohne Probleme (also IDs werden richtig vergeben).
nur bei dieser einer klappt es nicht.

mit +1 kommt es zum gleichen Fehler


----------



## HoaX (30. Jan 2009)

da du wohl autoincrement verwendest lass einfach die spalte weg beim insert, die db kümmert sich schon richtig darum.

ich vermute die zwei anderen methoden eigene verbindungen auf? last_insert_id ist nur innerhalb der session gültig, darum wird beim ersten aufruf wohl "null" zurückgeliefert und die db ignoriert den wert großzügigerweise.


----------



## alfy7 (30. Jan 2009)

cool danke, 

 jetzt verstehe ich, warum es nicht funktioniert hat.
 

mit der neue Verbindung hattest du recht. ich war dabei die Anwendung so um zu schreiben, dass es nur eine Verbindung aufgebaut wird und nicht jedesmal  bei jeder Anfrage, und da hat es aufgehört zu funktionieren. 

also danke noch mals  :toll:


----------

