首页 >数据库 >mysql教程 >如何在 Android 版 SQLite 中安全地使用带有占位符的 IN 子句?

如何在 Android 版 SQLite 中安全地使用带有占位符的 IN 子句?

Mary-Kate Olsen
Mary-Kate Olsen原创
2025-01-18 17:16:09762浏览

How to Safely Use the IN Clause with Placeholders in SQLite for Android?

IN 子句和占位符

问题:

在 Android 中使用动态字符串连接的 IN 子句的 SQLite 查询面临以下挑战:

  • 标准占位符 (?) 未正确替换。
  • 直接替换连接的字符串可能会使查询面临 SQL 注入的风险。

解决方法:

要将 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn