Je construis une commande d'insertion à exécuter à l'aide de jdbc. Cela consiste en partie à concaténer une chaîne générée par l'utilisateur ... tout cela fonctionne jusqu'à ce que l'utilisateur utilise une chaîne comme celle-ci:
a B c d
String userString="a'bcd";
String insertTableSQL = "INSERT INTO myTable "
+ "(insertColumn) "
+ "VALUES("
+"'"+userString+"'"
+")";
statement.executeUpdate(insertTableSQL);
Vous pouvez effectuer l'une des opérations suivantes:
Utilisez la classe PreparedStatement. ( Recommandé )
String userString="a'bcd";
String myStatement = " INSERT INTO MYTABLE (INSERTCOLUMN) VALUES (?)";
PreparedStatement statement= con.prepareStatement (myStatement );
statement.setString(1,userString);
statement.executeUpdate();
Échappez aux guillemets simples.
En SQL, les guillemets simples seront échappés en utilisant des guillemets simples doubles. '
-> ''
String userString="a'bcd";
String changedUserString = userString.replace("'","''");
//changedUserString = a''bcd
String insertTableSQL = "INSERT INTO myTable (insertColumn) VALUES("
+" '"+changedUserString +"' )";
Vous pouvez utiliser StringEscapeUtils à partir de la bibliothèque Apache Commons Lang . En utilisant cela, vous pouvez échapper des caractères de html, xml, sql, etc. Recherchez la méthode escapeXXX
pour votre usage. Pour référence: Quand j'ai besoin d'échapper à la chaîne Html?
note: escapeSql
a été supprimé dans Apache Commons Lang 3 (voir Migration de StringEscapeUtils.escapeSql depuis commons.lang qui fait référence https://commons.Apache.org/proper/ commons-lang/article3_0.html # StringEscapeUtils.escapeSql )
Par exemple:
String str = FileUtils.readFileToString(new File("input.txt"));
String results = StringEscapeUtils.escapeHtml(str);
System.out.println(results);
Contribution:
<sometext>
Here is some "Text" that I'd like to be "escaped" for HTML
& here is some Swedish: Tack. Vars?god.
</sometext>
Sortie:
<sometext>
Here is some "Text" that I'd like to be "escaped" for HTML
& here is some Swedish: Tack. Varsågod.
</sometext>
Voici une autre option:
Utilisez une méthode native Android conçue à cet effet:
DatabaseUtils.sqlEscapeString(String)
Voici la documentation en ligne:
Le principal avantage de l'utilisation de cette méthode, à mon avis, est l'auto-documentation en raison du nom clair de la méthode.
String userString="a'bcd";
String insertTableSQL = "INSERT INTO myTable "
+ "(insertColumn) "
+ "VALUES("
+"'"+DatabaseUtils.sqlEscapeString(userString)+"'"
+")";
statement.executeUpdate(insertTableSQL);