在 Android 中使用动态字符串连接的 IN 子句的 SQLite 查询面临以下挑战:
要将 IN 子句参数化,请使用由逗号分隔的问号字符串,其长度等于要替换的值的数量。避免使用外部数据来确保动态字符串的有效性。
<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>
这种方法确保占位符被正确替换,并防止 SQL 注入。
以上是如何在 Android 版 SQLite 中安全地使用带有占位符的 IN 子句?的详细内容。更多信息请关注PHP中文网其他相关文章!