Avatar billede trp79 Nybegynder
12. juli 2006 - 15:08 Der er 10 kommentarer og
1 løsning

værdi af felt retur ved insert via preparedstatement

Hejsa
Jeg laver en insert i en MySQL DB vha. en preparedstatement.
Hvordan får jeg nemmest værdien af min primærnøgle tilbage på det insert jeg netop har lavet? Primær nøglen udgøres af et felt - det er et tal.

På forhånd tak, mvh
Torben
Avatar billede kalp Novice
12. juli 2006 - 15:37 #1
Select *
from xxx
where primaryid = (Select MAX(primaryid) from xxx);

hvis det skal være SQL
Avatar billede kalp Novice
12. juli 2006 - 15:38 #2
Du kan evt. også gøre det via. en java løkke hvor du kører hele dit resultset igennem.
Avatar billede arne_v Ekspert
12. juli 2006 - 16:05 #3
nej nej nej nej nej
Avatar billede arne_v Ekspert
12. juli 2006 - 16:05 #4
SELECT LAST_INSERT_ID()

virker ogsaa i JDBC
Avatar billede arne_v Ekspert
12. juli 2006 - 16:07 #5
men JDBC har faktisk en fatabas euafhaengig maade at goere det paa

hvis JDBC driveren er JDBC 3.0 compliant kan du bruge:

pstmt.getGeneratedKeys()

som returnerer et result set med de genererede keys
Avatar billede arne_v Ekspert
12. juli 2006 - 16:08 #6
... database uafhaengig ...
Avatar billede arne_v Ekspert
12. juli 2006 - 16:09 #7
med hensyn til hvorfor MAX teknikken ikke er god saa kan jeg anbefale min seneste artikel: http://www.eksperten.dk/artikler/996
Avatar billede kalp Novice
12. juli 2006 - 17:14 #8
Nu har jeg ikke læst din artikel arne, men går ud fra du mener, at MAX metoden er dårlig hvis man altså udvikler et flerbruger system?

til normalt brug burde den vel være udmærket siden den findes:)
Avatar billede arne_v Ekspert
12. juli 2006 - 17:35 #9
Nej, jeg mener generelt at den er daarlig. Altsaa daarlig til at finde netop indsat ID.

Hvis man har to metoder hvoraf en virker i alle tilfaelde og en som kun
virker i enkeltbruger sammenhaeng, saa er det svaert at se en god grund til
at bruge den sidste.

Jeg vil ioevrigt til enhver tid mene at flerbruger sammenhaeng er det normale
og at enkeltbruger er noget specielt.

MAX er en udmaerket funktion som har mange gode anvendelser. Men at finde auto
increment id'er er ikke en af dem.
Avatar billede trp79 Nybegynder
14. juli 2006 - 07:19 #10
Super artikel arne og godt svar i denne tråd, så smid du bare et svar.

Når man bruger getGeneratedKeys() kan det gøres som følgende:
pstm = conn.prepareStatement("INSERT INTO A (felt) VALUES (?)", PreparedStatement.RETURN_GENERATED_KEYS);
....
og man får så fat i keyen ved at sige:
int key = rs.getInt(1));
Avatar billede arne_v Ekspert
14. juli 2006 - 13:52 #11
svar
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester