Avatar billede luctatic Nybegynder
05. marts 2003 - 13:50 Der er 10 kommentarer og
1 løsning

Apostrof

Dette er godt nok også lidt et SQL spørgsmål, men der fandtes ikke lige noget forum der kunne bruges så det røg lige herind.

Har en tekst string, kunne se sådan ud

String s = "Ekstra: cd boks med plads til 6 CD'er";

Den string skal sættes ind i en database via SQL. SQL sætningen bruger jo bare apostroffen "'" til at indikere starten og slutningen på en værdi. Dvs den opfatter apostroffen i "CD'er" som afslutningen af værdien og laver en grum fejl der gør at updaten ikke virker.

Kan dette løses eller må man ty til andre midler og slet ikke tillade apostroffer i Strings i en database?
Avatar billede arne_v Ekspert
05. marts 2003 - 13:54 #1
Brug PreparedStatement istedetfor Statement.
Avatar billede arne_v Ekspert
05. marts 2003 - 13:56 #2
Når du laver bruger Statement så skriver man:

Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM tabel WHERE field = '" + value + "'");

og får problemer hvis value indeholder apostrofer.

Når du bruger PreparedStatement skriver du:

PreparedStatement pstmt = con.prepareStatement("SELECT * FROM table WHERE field = ?");
pstmt.setString(1, value);
ResultSet rs = pstmt.executeQuery();

og du har ingen apostrof problemer !
Avatar billede luctatic Nybegynder
05. marts 2003 - 14:05 #3
fint - hvis du siger det virker så er jeg sikker på det også virker. Nu skal det bare implementeres :D
Avatar billede arne_v Ekspert
05. marts 2003 - 14:11 #4
Det virker.

Det er 2 gode grunde til at bruge PreparedStatement.

1)  Det giver bedre performance, hvis man bruger den samme query
    flere gange (sætter ? til forskellige værdier).

2)  Man undgår de apostrof problemer.
Avatar billede luctatic Nybegynder
05. marts 2003 - 15:04 #5
Jeps - vil også bruge preparedStatement for fremtiden, men denne gang må vi nok nøjes med at udskifte ' med `, selvom det ikke er pænt. At ændre alle de SQL sætninger så de benytter preparedStatement, og ændre i den db_connection der kun ta'r en String ind som den benytter som sql-sætning, til at tage en anden slags sql-sætning ind, og så også de parametre den benytter sig bliver vist en større omgang.
Avatar billede arne_v Ekspert
05. marts 2003 - 15:09 #6
Lad mig gætte: du bruger den database handler klasse, som
er så populær her på Eksperten.
Avatar billede luctatic Nybegynder
05. marts 2003 - 15:20 #7
Nja, ikke helt. Benytter en jeg selv har skrevet, men den er meget tæt på den. Den returnerer bare fejlværdierne som Strings hvis der sker fejl istedet for at udskrive dem. Så kan jeg nemlig handle ud fra fejlmeddelelsen hvis en sådan kommer, og muligvis skrive den til en log. Virker lidt bedre i længden, da det jo ikke altid er lige optimalt bare at skrive fejl ud til en konsol. En error.log er som regel lidt bedre til fejl søgning.

Den benytter sig heller ikke som standard af en odbc-driver, men af en driver der bliver sat i kontruktøren samt en masse andet guf, men i bund og grund er det vel en udvidet udgave af den klasse der bliver brugt.
Avatar billede arne_v Ekspert
05. marts 2003 - 15:48 #8
Du må have lavet en udvidelse til prepared statement så.

Med hensyn til logging: har du prøvet at kigge på log4j (eller
J2SE 1.4 logging) ?
Avatar billede luctatic Nybegynder
05. marts 2003 - 16:05 #9
Nope. Godt værktøj? Normalt plejer jeg selv at oprette en outputstream til en fil jeg så skriver til. Det største problem med java er næsten at man aldrig bliver færdig med at lære alle de behagelige værktøjer der findes til det, så man skriver sine egne istedet :D
Avatar billede arne_v Ekspert
05. marts 2003 - 16:56 #10
Ja.

Man sætter sine log statements ind som:

Logger log = Logger.getLogger("aaa.bbb.ccc");
BasicConfigurator.configure();

log.info("transaktion gik godt");
log.warn("ingen rækker fundet");
log.error("database driver ikke fundet");

etc.

Og så kan man i en ekstern fil log4j.properties sætte:

log output: console / fil
log level: debug / info / warn / error / fatal

Det gør at man kan sætte forholdsvis meget logging ind i sin
kode og så styre mængden på runtime via den konfigurations-fil.

Der er også mere avancerede features:
  - man kan styre både log output og log level på dele
    af applikationen
  - man outputte til flere steder
  - man kan gemme i database etc.

Du kan læse mere på:
http://jakarta.apache.org/log4j/docs/index.html
Avatar billede arne_v Ekspert
05. marts 2003 - 17:04 #11
Men du har helt ret - der er så mange ting man gerne ville sætte
sig ind i hvis man havde tiden.

Men et par som jeg synes er et must er: log4j og junit.
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