Les requêtes SQLite utilisant des clauses IN avec concaténation dynamique de chaînes dans Android sont confrontées aux défis suivants :
Pour paramétrer une clause IN, utilisez une chaîne de points d'interrogation délimités par des virgules dont la longueur est égale au nombre de valeurs à remplacer. Évitez d'utiliser des données externes pour garantir la validité des chaînes dynamiques.
<code>String[] names = { "name1", "name2" }; // 动态获取值 String query = "SELECT * FROM table WHERE name IN (" + makePlaceholders(names.length) + ")"; Cursor cursor = mDb.rawQuery(query, names);</code>
<code>public static String makePlaceholders(int len) { if (len < 1) { throw new IllegalArgumentException("Length must be at least 1"); } StringBuilder sb = new StringBuilder(len * 2 - 1); sb.append("?"); for (int i = 1; i < len; i++) { sb.append(",?"); } return sb.toString(); }</code>
Cette approche garantit que les espaces réservés sont remplacés correctement et empêche l'injection SQL.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!