} try { res = sql.executeQuery("Select id from `handler` where salg_ID=-1"); ID = res.getInt(1); } catch (SQLException e) { System.err.println("Error getting ID from created handel."); e.printStackTrace(); }
Jeg tror at den løsning de fleste vælger er: - ikke at bruge et auto felt i databasen - selv generere en unik id i applikationen - gemme recorden med den id man kender
Well, det kan da ikke være så svært at få et id ud? jeg lurede lidt i api'et, og der er en getGeneratedKey i statement interface klassen, men jeg kan ikke lige få den til at virke.
[forudsætter at der kun er 1 generated key som er et heltal] Hvis ikke betingelserne er opført så må du finde en alternativ løsning.
Visse database har database specifikke muligheder. Lidt søgning på nettet fandt at MySQL skulle have: SELECT LAST_INSERT_ID() der skulle returnere sidste ID (jeg har ikke testet).
Den eneste generelle metoide der vil virke med alle JDK og JDBC drivere er selv at generere de keys. Der er en almindelig accepteret metode til at generere dem: Scott Amblers high-low approach.
Hmm.. men problemet ved at generere keys, er jo at flere applikationer kan få problemer med ikke at generere de samme keys. - anyway, jeg synes egenligt det er "pænest" at lade databasen om det.
Jeg har selv arbejdet med noget der ligner for noget tid siden. Det endte med jeg bare lod mysql tælle nøgler i Ordre tabellen op automatisk og så hver gang jeg gemte en ordre fik den en ekstra attribut "timestamp" = (currentTimeMilis + random(256) + lokal ip) Så når jeg skulle gemme ordrelinier hentede jeg bare det ordreId som havde samme timestamp som det der stod på ordren.
Jeg prøvede også getGeneratedKeys, men det virkede ikke som det skulle. Jeg brugte mysql 4.01a og innodb tabeller.
Løsningen fungerede dog selv med over 25 tråde der oprettede tilfældige ordrer med forskellige antal varer på.
Du kan jo også overveje at have en ordreId tabel du låser hver gang du skal have et ordreId og så tælle det op. Det er bare en hel***** meget samtidighed du mister på den måde.
Jeg har lavet en løsning der virker med getGeneratedKeys, og det kører indtilvidere som det skal. - eneste hage er at man skal bruge connector v. 3 som stadigt er i beta (Jeg har ikke konstateret nogen fejl på den endnu.) Men alt i alt virker projektet som det skal med getGeneratedKeys fra SDK 1.41
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.