Avatar billede dsj Nybegynder
18. december 2002 - 22:30 Der er 8 kommentarer og
1 løsning

Problem med at gemme String i MySQL

Jeg har et lille irriterende problem, som der garanteret er nogen der kender løsningen på...

Når jeg gemme en String i min MySQL-DB i en varchar-kolonne, som indeholder f.eks. tegnet ' sker der en fejl, idet dette tagn også brugeres i sql til at afgrænse strengen.

Hvordan får jeg gemt min String korrekt i MySQL ???
Avatar billede articfruit Nybegynder
18. december 2002 - 22:36 #1
mener det er \' eller også /'
Avatar billede arne_v Ekspert
18. december 2002 - 22:39 #2
Hvis du bruger:
  String val;
  stmt.executeUpdate("INSERT INTO T VALUES('" + val + "')");
kunne du prøve med:
  String val;
  PreparedStatement ps = con.prepareStatement("INSERT INTO T VALUES('?')"));
  ps.setString(1,val);
  ps.executeUpdate();eller:
  String val;
  PreparedStatement ps = con.prepareStatement("INSERT INTO T VALUES(?)"));
  ps.setString(1,val);
  ps.executeUpdate();(jeg kan ikke huske hvilken af dem der er korrekt) og se om det kan
håndterer det tegn korrekt.
Avatar billede mosquito Nybegynder
18. december 2002 - 22:39 #3
escape code \'
Avatar billede arne_v Ekspert
18. december 2002 - 22:40 #4
Dårlig ombrydning - bemærk det *eller* som altså ikke er kode
men en adskillelse af 2 forskellige forslag.
Avatar billede arne_v Ekspert
18. december 2002 - 22:45 #5
Der er noget om det på:
http://developer.java.sun.com/developer/onlineTraining/Programming/JDCBook/jdbc.html#esc

Ifølge det, så er mit forslag:
  String val;
  PreparedStatement ps = con.prepareStatement("INSERT INTO T VALUES(?)"));
  ps.setString(1,val);
  ps.executeUpdate();
udmærket.
Avatar billede mosquito Nybegynder
18. december 2002 - 22:55 #6
må erkende at svaret kom hurtigere end problemet var gennemtænkt, og må følgende give Arne ret i at en fornuftig løsning vil være at eliminere de forskellige escapecodes som kan forekomme i en tekst og ikke som jeg angiver.
Avatar billede dsj Nybegynder
18. december 2002 - 23:11 #7
Generer tegnene ikke, når man gør det på din måde arne??

Har godt set den måde at gøre det på, men var ikke lige klar over hvad fordelen skulle være, men måske er den her :)
Avatar billede arne_v Ekspert
19. december 2002 - 05:59 #8
Jeg tror, at preparedStatement løser problemet.

Den artikel hos SUN tror at det løser problemet.

Det må være værd at at prøve.

Den tekniske forklaring er:
- en normal statement sender en streng gennem en SQL
  parser og elvfølgelig har man problemet
- en prepared statement sende strengen med "?" gennem
  en SQL parser og får lavet en data struktur i databasens
  interne format. Når så du sætter strengen bliver dens data
  sat ind i det interne format. Og det interne format er
  normalt et binært format (formentligt med fixed lengt data
  felter eller eksplicit længde angivelse på felter). Og så
  er quotes ikke længere et problem.
Avatar billede dsj Nybegynder
19. december 2002 - 13:03 #9
Jamen det virker jo arne :)
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