Duplicate entry

Status
Nicht offen für weitere Antworten.
A

alfy7

Gast
hallo

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

Code:
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
 
S

SlaterB

Gast
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

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

alfy7

Gast
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

Top Contributor
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.
 
A

alfy7

Gast
cool danke,

jetzt verstehe ich, warum es nicht funktioniert hat.
:D

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:
 
Status
Nicht offen für weitere Antworten.

Oben