Avatar billede madiedk Nybegynder
25. september 2008 - 19:37 Der er 8 kommentarer og
1 løsning

null i prepared statement

Hej

jeg skal slette noget fra en database via et prepared statement

i en if sætning har jeg disse 2 udfald:
1. stmt.setDate(4, null);
2. stmt.setDate(4, sqlTilDato);

og sql sætningen er

"DELETE FROM Omkostningstrin WHERE (afd = ? AND omkid = ? AND  fradato = ? AND tildato = ?)"

problemet er at jeg vil gerne have at hvis der ikke står noget i tildato kolonnen så skal det slette når jeg bruger stmt.setDate(4, null);
men det virker ikke. forstår i problemet?
Avatar billede _carsten Nybegynder
25. september 2008 - 19:54 #1
Nu ved jeg ikke hvad det er for en db, men MySql ville jeg håndtere det på nedenstående måde

Sæt fradato of tildato til de reelle værdier, og lav din sql sådan:

"DELETE FROM Omkostningstrin WHERE (afd = ? AND omkid = ? AND  (fradato = ? AND tildato = ?) OR tildato IS NULL)

Jeg ville mene det fungerede, men har ikke testet.
Avatar billede madiedk Nybegynder
25. september 2008 - 20:26 #2
okay tak for inspirationen, jeg kan dog ikke selv løse den helt, jeg kan se at jeg for slette for mange rækker

her er mit forsøg:
"DELETE FROM Omkostningstrin WHERE (afd = ? AND omkid = ? AND (fradato = ? OR fradato is null AND tildato = ? OR tildato is null))"


altså hvis brugerne ikke skriver en dage i begge eller bare et af dato felterne skal den kunne håndterer det. og selvfølgelig også hvis der skrives i begge dato felter
Avatar billede _carsten Nybegynder
25. september 2008 - 20:39 #3
Jeg tvivler på du for slettet flere records end der opfyldes af kriterierne.

Generelt - laver du et program som at visse data skal udfyldes førend programmet fungerer, må bruger ikke kunne
gemme data førend betingelserne er opfyldt, så du står nok overfor en lille omstrukturering af programmet

Du nødt til tvinge bruger til at sætte en tildato eller også skal du selv sætte tildato == fradato, hvis dit program leverer et fornuftigt resultat ud fra det kriterie
Avatar billede _carsten Nybegynder
25. september 2008 - 20:40 #4
Prøver igen

Generelt - laver du et program som kræver at .......
Avatar billede madiedk Nybegynder
25. september 2008 - 20:48 #5
jeg ved godt jeg ikke for slette for mange, men at jeg laver en forkert sql-sætning mener.
brugeren indtaster noget i nogle jtextfields og hvor det defineres hvad der skal slette i en ms access database. brugeren skal som minimum skrive en afdeling og omkid og må så selvom fradato og tildato. hvis der ikke står noge i fradato og tildato så skal alt slette hvor afdeling og omkid opfylder kriterierne og hvis der står noget i fradato eller tildato eller begge så skal det tages med.

jeg kan godt løse problemet ved at lave flere sql sætninger og så lave en if else sætning i java koden der tjekker om der står noget i fradato og tildato jtextfieldsne

men jeg vil bare gerne have den bedste løsning
måske noget if else i sql koden hvis man kan det?
Avatar billede _carsten Nybegynder
25. september 2008 - 20:54 #6
Det kan du sagtens lave

Eks:

String sql = "DELETE FROM Omkostningstrin WHERE (afd = ? AND omkid = ? ";

    if(tildato.length() > 0)
        sql += " AND  fradato = ? ";
       
    if(fradato.length() > 0)
        sql += "AND tildato = ? ";
       
   
    sql += ")";
Avatar billede _carsten Nybegynder
25. september 2008 - 20:56 #7
Du bliver så nødt til at udvide den lidt, da du skal tage hensyn til om der skal slettes på de nævnte datoer eller datointerval
Avatar billede madiedk Nybegynder
14. november 2008 - 14:07 #8
tak, smid et svar det virker
Avatar billede _carsten Nybegynder
14. november 2008 - 15:05 #9
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