Avatar billede frigsfrogs Nybegynder
04. oktober 2004 - 10:19 Der er 26 kommentarer og
2 løsninger

bruge tabel-navn under en join

Heysa. Kan godt være at spørgsmålet lyder somom det skulle laves under database men det er mere java der er problemet (tror jeg).

Jeg laver en join i min database mellem 2 tabeller (har valgt bare at vise eksempler på tabeller) "Person" og "Køn".

Person indeholder:

id
navn
adresse
osv...

Køn indeholder:

id
køn

dette virker fint når jeg henter data ud at jeg får person og køn ved at lave en join. Men når jeg så skal til at oprette objekter får jeg et problem. Jeg laver en resultset.getInt("id"); men der er jo 2 kolonner med navnet id. derfor ville jeg gerne kunne lave: resultset.getInt("person.id") i stedet for men så siger java ugyldig kolonnenavn. hvordan kan man så bestemme hvilket af de 2 id'er man vil bruge?

jeg har ikke mulighed for at ændre kolonnenavnene til f.eks. personId og kønId da det laves til en eksisterende database :(

håber i kan hjælpe

Mvh Carsten
Avatar billede _carsten Nybegynder
04. oktober 2004 - 10:24 #1
Det er fordi bruger SELECT *

Kan du ikke ændre til SELECT Person.id, Person.navn, Person.adresse, Køn.køn
Avatar billede frigsfrogs Nybegynder
04. oktober 2004 - 10:27 #2
Hmm det ville være ret nederen da der er op til 30 attributter der skal skrives så. kan jeg så bruge resultet.getInt("person.id") eller skal jeg til at ændre til select person.id as personId oder was?
Avatar billede Slettet bruger
04. oktober 2004 - 10:29 #3
Hvad med at bruge SELECT Person.*, Køn.* i din query, så bliver den knap så "bloated", var bare en ide?
Avatar billede _carsten Nybegynder
04. oktober 2004 - 10:29 #4
Jeg ville bare bruge resultset.getInt("id"); det er jo stadig kolonnenavnet
Avatar billede ldanielsen Nybegynder
04. oktober 2004 - 10:29 #5
Afhængig af databasen kan du bruge AS:

SELECT Person.id AS PersonId, Person.navn AS Personnavn, ...

I øvrigt: Har du ikke problemer med at bruge ø i kolonne- og tabelnavne?
Avatar billede frigsfrogs Nybegynder
04. oktober 2004 - 10:31 #6
til idanielsen: køn er bare et eksempel. bruger ikke ø ;) prøver lige jeres eksempler.
Avatar billede frigsfrogs Nybegynder
04. oktober 2004 - 10:32 #7
_carsten:

jamen hvis jeg bruger resultset.getInt("id"); er det så person id'et eller køn id'et der bliver brugt?
Avatar billede ldanielsen Nybegynder
04. oktober 2004 - 10:32 #8
Det er ikke bloated at angive hvilke kolonner du skal bruge, tværtimod. SELECT * overlader til databasen at generere en list over kolonner, og det er en del lettere for den at du i stedet fortæller den det.

Så hvis det er en slags dovenskab, så er det et skidt argument.
Avatar billede frigsfrogs Nybegynder
04. oktober 2004 - 10:34 #9
det ER netop dovenskab. og enormt grim kode synes jeg. men det er måske måden man gør?
Avatar billede _carsten Nybegynder
04. oktober 2004 - 10:37 #10
Det afhænger af om bruger Person.id eller Køn.id, bruger du Person.id er det selvfølgelig den.

Dovenskab: Brug corholios måde
Dybt, dybt seriøs:  brug min/ldanielsen
Avatar billede frigsfrogs Nybegynder
04. oktober 2004 - 10:37 #11
har lige prøvet med person.id, person.navn, køn.id osv men kan stadig ikke bruge resultset.getInt("person.id"); skriver stadig ugyldigt kolonnenavn.
Avatar billede frigsfrogs Nybegynder
04. oktober 2004 - 10:39 #12
_carsten:

du skrev:

Kan du ikke ændre til SELECT Person.id, Person.navn, Person.adresse, Køn.køn

jeg SKAL også have fat på Køn.id fra databasen. så hvis jeg laver en resultset.getInt("id"); er det så køn.id eller person.id jeg får fat på?
Avatar billede _carsten Nybegynder
04. oktober 2004 - 10:40 #13
Du bruger corholio's måde lidt for bogstaveligt

Sådan Person.*, Køn.køn
Avatar billede _carsten Nybegynder
04. oktober 2004 - 10:41 #14
??? -  Det må da være nok med én, alt andet vil være redundante data!
Avatar billede ldanielsen Nybegynder
04. oktober 2004 - 10:42 #15
Hvis jeg skal vælge mellem at bruge 10 min på at skrive koden optimalt, eller at belaste min server unødigt, ja så vælger jeg det første.

Og ja, det er sådan man gør. Man skal vel kunne lide at skrive kode, ikke?
Avatar billede frigsfrogs Nybegynder
04. oktober 2004 - 10:44 #16
øhm ikke rigtig når jeg jo skal oprette objekter ud af det jeg får. hvis jeg f.eks. har:

Personer:
id: 1
navn: carsten

id: 2
navn: ida

id: 3
navn: michael

Køn:

id: 1
køn: mand

id: 2
køn: kvinde

og jeg i java skal kunne selecte kønnet med id 1 så skal jeg jo have den med i objektet når jeg opretter det.
Avatar billede frigsfrogs Nybegynder
04. oktober 2004 - 10:45 #17
_carsten:

hmmm... ved ikke om jeg har fået dig til at misforstå hvad de 2 id'er er... det er de 2 primary keys... på person vil der også være en der hedder: person.kønId som er fremmednøgle til køn.id...
Avatar billede _carsten Nybegynder
04. oktober 2004 - 10:50 #18
id'et er det samme i både Personer og Køn, så når du henter data fra databasen
opretter du object Person og object Køn på følgende måde

Person p = new Person(resultset.getInt("id"))
Køn k = new Køn( p.getId() );
Avatar billede _carsten Nybegynder
04. oktober 2004 - 10:52 #19
Ja - men som jeg forstår problemet er det jo ligegyldigt, da du skal oprette objecter på baggrund af de data som er i databasen - eller hvad ??
Avatar billede frigsfrogs Nybegynder
04. oktober 2004 - 11:00 #20
well... tror jeg er med på hva du mener du. men som du forklarede det lyder det somom du tror at id på køn er fremmednøgle til id på person? for de er nemlig IKKE ens. men det er person.kønId (fremmednøgle) jeg kan bruge ved resultset.getInt("kønId");

prøver lige... vender tilbage :)
Avatar billede frigsfrogs Nybegynder
04. oktober 2004 - 11:38 #21
Det ser sku ud til at virke nu :)

er det i orden at _carsten får 40 mens corholio og idanielsen får 10 hver?
Avatar billede _carsten Nybegynder
04. oktober 2004 - 11:43 #22
Ok med mig
Avatar billede ldanielsen Nybegynder
04. oktober 2004 - 11:54 #23
nejtak, det var vist kun den med AS jeg kom med, og det kun ne du jo måske ikke bruge ...?
Avatar billede _carsten Nybegynder
04. oktober 2004 - 11:54 #24
Hvorfor ikke bare fordele point 20/20/20
Avatar billede frigsfrogs Nybegynder
04. oktober 2004 - 12:17 #25
idanielsen: jeg lærte skam noget af dig ;) smid lige et svar alle 3 så får i 20 hver.
Avatar billede ldanielsen Nybegynder
04. oktober 2004 - 12:45 #26
Jamen det er jeg da glad for :o)
Avatar billede frigsfrogs Nybegynder
04. oktober 2004 - 22:25 #27
nå corholio gad ik svare så i får points :) takker for hjælpen :D
Avatar billede Slettet bruger
04. oktober 2004 - 22:33 #28
Sorry, det var ikke for at være uhøflig at jeg ikke svarede har blot ikke tjekket min mail før nu (og dermed dette spørgsmål), behøvede dog heller ikke point for den strø-tanke jeg kom mig, jeg er blot tilfreds med at du har fundet en løsning.

Held og lykke med projektet :-)
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