2013-03-04 8 views
6

Ho una tabella MySql person_details che contiene p_id e p_name. Ora, se voglio inserire un record in cui p_name contiene una singola citazione ', mi piacerebbe eseguo in questo modo-Come sfuggire alla citazione singola in string letterale utilizzando MySQL da Java

insert into person_details values (1, 'D\'souza');

Ora, io sto cercando di eseguire lo stesso attraverso un codice Java in questo modo -

insert into person_details values (1, 'D\\\'souza');

e ottengo MySQLSyntaxErrorException.

Qualcosa non va?

+0

utilizzare l'UrlEncode() funzione –

risposta

11

Per rispondere direttamente alla tua domanda, raddoppiare le virgolette.

insert into person_details values (1, 'D''souza'); 

Ma ho piuttosto parametrizzato la query utilizzando PreparedStatement.

Ecco i pro:

  • evitano da SQL Injection
  • non ha bisogno di utilizzare le virgolette singole.

esempio,

String str = "insert into person_details values (?, ?)"; 
query = con.prepareStatement(str); 
query.setInt(1, 1); 
query.setString(2, "D'souza"); 
query.executeUpdate(); 
+0

+1 Le dichiarazioni preparate sono la via da seguire se i dati provengono da qualche altra parte. –

+0

Semplicemente fantastico signore. Ho anche provato tutte le combinazioni di \\\ ', \\', \ 'Tutto mi ha restituito SQL Syntax Error. Ha funzionato alla grande –

4

In MySQL, si utilizza '' per un singolo ' all'interno di una stringa:

insert into person_details values (1, 'D''souza'); 

Link to docs

Ma questo è solo per quando si sta fornendo i dati letteralmente, come ad esempio uno script SQL di controllare la validità -popola una tabella con i dati che controlli, ecc. Se stai ricevendo quella stringa da una fonte esterna (un utente finale, per esempio, o un sistema esterno) allora presumibilmente non starai scrivendo un letterale, ma piuttosto usando un variabile stringa. In tal caso, si desidera utilizzare istruzioni preparate come JW. describes in his answer. Perché: http://xkcd.com/327/

2

Si potrebbe anche usare "

insert into person_details values (1, "D'souza"); 
+1

A meno che, naturalmente, non si utilizzino [virgolette ANSI] (http://dev.mysql.com/doc/refman/5.6/en/server-sql-mode.html#sqlmode_ansi_quotes). –

Problemi correlati