Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802

    Database: problema con '

    La mia applicazione si appoggia ad un database per salvare diverse informazioni e queste stringhe molto probabilmente conterranno diversi apostrofi '. Il problema è che quando provo a scrivere nel db ottengo un'eccezione per via degli apostrofi presenti nelle stringhe che devo inserire...

    codice:
    st.executeUpdate("INSERT INTO SNIPPETS VALUES('" +
                        snippet.getCategory() + "','" + snippet.getName() + "','" +
                        snippet.getCode() + "','" + snippet.getDescription() + "')");

    Come posso rimediare? Non posso impedire l'inserimento degli apostrofi!

    Grazie
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Hai due strade per poter affrontare il problema:

    1) Effettui un replace di tutti gli apostrofi con un \' o con un doppio apostrofo (dipende anche dal DB che usi). Non funziona con tutti.

    2) Utilizzi dei prepared statement

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da LeleFT
    Hai due strade per poter affrontare il problema:

    1) Effettui un replace di tutti gli apostrofi con un \' o con un doppio apostrofo (dipende anche dal DB che usi). Non funziona con tutti.

    2) Utilizzi dei prepared statement

    Ciao.
    Grazie per aver risposto

    Allora... la prima via mi sembra poco efficiente, in grosse stringhe cercare ogni occorrenza di un apostrofo e sostituirlo con qualcos'altro può portare via troppo tempo 8(
    Provo a cercare qualcosa su questi "prepared statement" ;-)
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  4. #4
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Allora, ho trovato questo: http://java.sun.com/docs/books/tutor.../prepared.html

    Ho dato una letta veloce ma non ho ben capito come questo possa risolvere il mio problema.

    Io ho questo codice:

    codice:
                int m = st.executeUpdate("INSERT INTO SNIPPETS VALUES('" +
                        snippet.getCategory() + "','" + snippet.getName() + "','" +
                        snippet.getCode() + "','" + snippet.getDescription() + "')");
    Usando un PreparedStatement diventerebbe così:

    codice:
    PreparedStatement ps = connection.prepareStatement("INSERT INTO SNIPPETS VALUES(?,?,?,?)");
    ps.setString(1, snippet.getCategory());
    ps.setString(2, snippet.getName());
    ps.setString(3, snippet.getCode());
    ps.setString(4, snippet.getDescription());
    ps.executeUpdate();
    Giusto? Se si, come risolve il mio problema con gli apostrofi? (quelli che davano problemi sono in snippet.getCode())


    Intanto grazie :-)
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Alex'87
    Se si, come risolve il mio problema con gli apostrofi?
    Un PreparedStatement viene fornito dalla Connection che è a sua volta fornita dal driver. In sostanza è il tal driver che "sa" quali sono le regole di escaping e quindi si occupa lui di precompilare quella statement in modo che poi i parametri vengano impostati in modo corretto. Non è una mera sostituzione "dove c'è ? metti il parametro".
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da andbin
    Un PreparedStatement viene fornito dalla Connection che è a sua volta fornita dal driver. In sostanza è il tal driver che "sa" quali sono le regole di escaping e quindi si occupa lui di precompilare quella statement in modo che poi i parametri vengano impostati in modo corretto. Non è una mera sostituzione "dove c'è ? metti il parametro".
    :-O

    Grazie, quindi è tutto a posto?
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  7. #7
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Provato, funziona perfettamente!

    Grazie mille ad entrambi
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.