Visualizzazione dei risultati da 1 a 3 su 3

Discussione: [JSP] problema con '

  1. #1
    Utente di HTML.it L'avatar di Alex80b
    Registrato dal
    Feb 2004
    Messaggi
    154

    [JSP] problema con '

    Ciao a tutti,
    ho un problema che non capisco come risolvere.
    Ho un modulo dove c'e' un campo di inserimento testo. Io recupero i dati inseriti in un'altra pagina che poi li inserisce in DB.
    Il problema mi si presenta ogni volta che qualcuno inserisce l'apostrofo ' nel campo di testo perchè la query SQL si incasina in quanto secondo me quando trova l'apostrofo non capisce se è una variabile o del testo.

    Ad esempio:

    INSERT INTO tabella (data, testo) VALUES ('2014-01-01', 'Ciao va tutto bene.')
    Questa la inserisce senza problemi.

    INSERT INTO tabella (data, testo) VALUES ('2014-01-01', 'Ciao mi serve un po' di tempo per capire il problema.')
    Questa query invece mi ritorna un errore di sintassi localizzato proprio dove c'e' l'apostrofo di "po'".

    Come si può risolvere questo problema?

    Grazie

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    MAI eseguire query in quel modo se non si è perfettamente in grado di prevedere quali siano i dati di partenza e, soprattutto, se non si sa perfettamente che questi siano "puliti".

    Per eseguire query su un DB quando si hanno dati provenienti dall'utente (quindi non cablati o sotto stretto controllo) si devono usare le PreparedStatement, che si occupano per te di normalizzare i dati:

    codice:
    java.sql.Date data = ...   // data proveniente dall'utente
    String testo = ...   // testo proveniente dall'utente
    
    // MODO SBAGLIATO!!
    String sql = "INSERT INTO tabella(data, testo) VALUES('" + formattaData(data) + "', '" + testo + "');";
    ...
    Statement stmt = con.createStatement( sql );
    stmt.executeUpdate();
    
    
    // MODO CORRETTO
    String sql = "INSERT INTO tabella(data, testo) VALUES(?,?);";
    ...
    PreparedStatement pstmt = con.prepareStatement( sql );
    pstmt.setDate(1, data);
    pstmt.setString(2, testo);
    
    pstmt.executeUpdate();

    Nota il "java.sql.Date": quando si lavora con i DB le date sono "rognose". Il tipo di dato "java.sql.Date" serve a sopperire proprio alla diversa forma con cui i DBMS accettano le date.

    Per costruire un oggetto java.sql.Date a partire da un oggetto java.util.Date (facilmente ottenibile in tanti modi):

    codice:
    java.util.Date dataOriginale = ...;
    java.sql.Date d = new java.sql.Date( dataOriginale.getTime() );

    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 Alex80b
    Registrato dal
    Feb 2004
    Messaggi
    154
    Grazie mille! Ho imparato una cosa nuova!

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 © 2025 vBulletin Solutions, Inc. All rights reserved.