* man har ikke problemer med ' og " i tekst strenge * man har ikke problemer med dato formater * bedre performance da det er billigt at skifte indholdet af et ? ud
Ingen af delene kan vidt finde anvendelse på tabelnavne.
Det kan være det er min database der ikke er optimal ... he det kigger jeg dog lige på senere. Jeg vil dog nok forsøge at løse problemet uden brug af PreparedStatements (altså lige i dette tilfælde)...
Får du null tilbage? Får du en exception (og hvad siger den)?
Og jeg mener heller ikke man kan lave dynamisk tabeller eller felter i en preparedstatement.
Ideen er, at man siger noget i retningen af
SELECT * FROM USERS WHERE USERNAME = ? AND PASSWORD = ?
Og senere sætter den præcise værdi for navn og passwordet. Tabelnavne og feltnavne kan man imidlertid ikke sætte ind i ?.
Årsagen er, at databasen modtager dit sql, skal den faktisk kompilere det (til databasends eget interne format), hver gang den modtager en sql-streng den ikke har set før.
Bruger du en PreparedStatement, er det den samme sql-streng, uanset hvilket password der sættes ind, og skal derfor kun kompileres første gang, den kaldes.
Bruger du alm Statement, bliver den forskellig, hver gang den kaldes, og skal derfor kompileres hver gang.
Dette er gevinsten ved PreparedStatements, men de kan altså ikke alt!
Hvordan kan man afgøre om en tabelstruktur ikke er optimal, hvis jeg har brug for at parametrisere tabelnavne? Jeg forstår det ikke og vil gerne have det at vide.
Ja jeg får selvfølgelig en nullpointerexception der hvor der bliver hentet noget ud fra resultsettet fordi det forberedte statement ikke returnerede noget, fordi jeg havde skrevet SELECT * FROM ? i mit preparedStatement. Jeg har løst det på en sådan måde at jeg ikke benytter forberedte statements. Det var sikkert et spørgsmål om tid før jeg havde fundet ud af at det ikke kunne lade sig gøre i forberedte statements. Det er nogle gange nemmere at spørge herinde, da der findes højt kompetente mennesker som er hurtige til at svare!
Det er ikke nødvendigvis et dårligt design, men måske...
I langt de fleste situationer, er der ikke noget vundet ved at parameterisere tabellerne. Man har nogle få tabeller, der alligevel er meget forskellige. Koden bliver også lidt sværere at læse.
Man kan jo spørge sig selv, i hvilke situationer der vil være en gevinst ved at parameterisere. Og det vil der sandsynligvis være, hvis man har mange tabeller, der er meget ens, men med små forskelle. En sådan databse er ikke særligt normaliseret, og jeg tror, det er det, der ligger bag Erik's lidt kryptiske kommentar.
Jeg kan oplyse om, at min database overhovedet ikke følger nogle normalformer og på ingen måde er optimeret. Som det ser ud i øjeblikket skal der bare være mulighed for lagring af permanent data og hentning af data, der netop er gemt i database. Så hvorfor bekymre sig om normalformer tihi.
Jeg ville tilføje at grunden til at databasen er som den ser ud nu her hos mig (hvor der gøres brug af parametrisering af tabelnavne) er en kombination af min manglende viden på dette område og så arbejdsgiverens ide .. hvad kan man gøre.
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.