Richtig und Threadsicher eine ID als Pr.Key einfügen
Hi,
habe folgendes Problem:
gegeben ist eine Tabelle mit diversen Feldern, wobei ID - Feld der PK ist(ansonsten keine Extras wie AUTO_INC oder so).
In diese Tabelle sollen nach Bedarf neue Datensätze eingefügt werden.
Wie mache ich das Einfügen ?
Ich dachte an folgendes Vorgehen:
Ich weiss wie lang die Tabelle werden kann, da der Datentyp vom PK(also ID) bekannt z.B. Integer;
solange die Tabelle nicht voll ist, frage ich mit SELECT ab welche ID bereits belegt sind(einfach),
dann nehme ich die kleinste ID und versuche einen Datensatz einzufügen. Kommt eine Ausnahme zu Stande, dann hat ein anderer Thread die ID in der zwischenzeit bereits belegt.
Also das ganze noch unter Beachtung dass die DB nicht voll ist, bis es geklappt hat.
Wie seht Ihr das , ist das Vorgehen ok ?
Axo: das ganze ist an ein Anmeldesysten in meiner FH gebunden. Es meldet sich jemand für eine z.B. Aufgabe an und für ihn soll eine Tabelleneintrag generiert werden mit einer ID(PK) und noch paar Daten wie Passwort usw. Dieses ganze soll von Servlets ausgeführt werden, die dann weil sie ja mehrfach zur selben Zeit aufgerufen werden können als einzelne Threads arbeiten und sich gegenseitig stören.
Bin für alle Vorschläge offen und bitte hier um Hilfe.
Gruß,
daom
die threads die ich rief werd ich nicht mehr los..
hi darom,
wie ich das sehe ist das ein klassisches shared memory problem.
wo immer von einander 'unabhaengige' routinen (threads, anwendungen) auf den selben speicherplatz zugreifen (egal was dieser nun sei) bedarf es einer synchronisation.
regeln kann man das z.b. mit hilfe einer semaphore.
ich moechte das hier aber nicht erklaeren weil:
1. ich dir nix falsches sagen will und es schon ne weile her ist dass ich in dieser materie war
2. verteilte systeme ein weitreichendes feld sind
such einfach mal nach dokumentation ueber java thread programming.. stichworte wie semaphore, mutex, shared memory, multithreading, etc. sollten dich schnell auf die richtige spur bringen.
hoffe das hilft irgendwie
gruss
marius