Avatar billede heine112 Nybegynder
17. september 2005 - 16:02 Der er 12 kommentarer og
1 løsning

Vedr. tekst i postgreSQL

Hej Eksperter
Jeg er helt ny i postgreSQL.

Jeg vil gerne gemme strenge af typen:
Søren's sko

Tegnet ' benyttes også i SQL. Jeg har prøvet at erstatte ' med '' men jeg får stadig fejl. Har du løsningen ?

mvh Heine112
Avatar billede arne_v Ekspert
17. september 2005 - 16:07 #1
jeg kan fint indsætt ei min 8.0.1 med ' erstattet med ''
Avatar billede arne_v Ekspert
17. september 2005 - 16:07 #2
præcis SQL ?

præcis fejl besked ?

programmerings sprog ?
Avatar billede heine112 Nybegynder
18. september 2005 - 09:56 #3
Det er version 8.0.3 af postgreSQL. Jeg anvender java 1.4.2_08.

Fejlen er:
java.sql.SQLException: ERROR: syntax error at or near "e5else"
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryEx
ecutorImpl.java:1471)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutor
Impl.java:1256)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.ja
va:175)
at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Stat
ement.java:389)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(Abstract
Jdbc2Statement.java:314)

når jeg sætter "\b\ul Opn\''e5else af" ind. Det er en rtf-tekst. Jeg har brugt systemet tidligere mod DB2, hvor det selvfølgelig virker.

mhv Heine112
Avatar billede heine112 Nybegynder
18. september 2005 - 14:14 #4
Hmm, det kan også være \ som driller i "Opnåelsen af" i rtf-format:
\b\ul Opn\'e5else af

//Heine112
Avatar billede varst Praktikant
18. september 2005 - 18:46 #5
Jeg kan også fint erstatte ' med '', og jeg kører også v8.0. Men du skal passe på med dine \, du skal helt sikkert bruge to af slagsen.
Avatar billede heine112 Nybegynder
18. september 2005 - 19:52 #6
Det er kombinationen af \ og '.

Prøv at sæt \'e5 ind. Brug fx psql - den dør !
//Heine112
Avatar billede arne_v Ekspert
18. september 2005 - 22:29 #7
skal du sætte \' ind eller er det nogle som sættes ind i "MySQL kompabilitet" ?
Avatar billede arne_v Ekspert
18. september 2005 - 22:30 #8
Nu bruger du jo Java ...

Hvorfor så ikke bruge PreparedStatement fremfor almindelig Statement - det burde
løse *alle* problemer med valide tegn i tekst !
Avatar billede heine112 Nybegynder
19. september 2005 - 11:33 #9
Er PreparedStatement ikke blot ment som en SQL-optimering, når samme type SQL-statement anvendes flere gange ?
Avatar billede arne_v Ekspert
19. september 2005 - 11:53 #10
Man indsætter binære værdier i en PreparedStatement - det giver flere fordele:

1)  samme sætning bare med forskellige værdier mange gange giver bedre performance
    (effekt varierer mellem forskellige databaser)

2)  håndtering af tekst med ' i O'Toole etc.

3)  ondsindet brug af tekst med i ' i (SQL injection)

4)  dato format problemer
Avatar billede heine112 Nybegynder
19. september 2005 - 23:41 #11
Hej
Jeg vil kigge nærmere på PreparedStatement lidt senere, men fik løst problemet som foreslået:
      a = replaceAll(a,"\\","\\\\");
      a = replaceAll(a,"'","''");
Dog: Da jeg kørte "vacuumdb -full" blev der ændre i rtf-teksterne ??
Er dette naturligt for postgreSQL ?

Systemet har kørt 1 år på DB2 (faktisk storartet), men på postgreSQL er der problemer med VIEWS. Views er tilsyneladende meget langsomme og evt kommer de uden resultater. Jeg troede, at en vacuumdb ville hjælpe...
Avatar billede heine112 Nybegynder
21. september 2005 - 20:44 #12
Hej arne_v og varst
Kom med nogle svar, så må i dele poinene...

Jeg er vist kommet igennem de fleste problemer.
mvh H
Avatar billede arne_v Ekspert
21. september 2005 - 20:46 #13
ok
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
Computerworld tilbyder specialiserede kurser i database-management

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