【问题标题】:App crashes when I type ' in SearchView当我在 SearchView 中键入 ' 时应用程序崩溃
【发布时间】:2015-11-13 11:09:59
【问题描述】:

我正在开发一个应用程序,当我开始输入SearchView 时会显示提示列表。一切都很顺利,但当我输入 SearchView 时,应用程序崩溃了。

 public Cursor searchByBrandText(String inputTextBrand) throws SQLException {
            db = this.getReadableDatabase();
            String where = inputTextBrand;
            String extra = "'%" + where + "%'";
            String query = "SELECT Brand_Name" + " from " + "Sample" + " where "
                    + "Brand_Name" + " LIKE " + extra;

            Cursor mCursor = db.rawQuery(query, null);

            if (mCursor.getCount() <= 0) {
                mCursor.close();
                return null;
            } else {
                return mCursor;
            }
        }

【问题讨论】:

  • 我认为您忘记添加错误日志了...
  • 你能告诉我如何使用绑定参数吗????
  • 我正在尝试用新字符串 []{ } 替换 rawQuery 中的 null 但在键入 ' 时无法解决崩溃问题

标签: android sqlite


【解决方案1】:

' 是 SQL 字符串分隔符。
如果您需要插入包含该字符的值,则必须将其 加倍。
像这样:

String where = inputTextBrand.replace("'", "''");

或者,更好的是,使用绑定参数(在这种情况下,不需要将 ' 加倍)。
像这样:

String query = "SELECT Brand_Name FROM Sample WHERE Brand_Name LIKE ?";
Cursor mCursor = db.rawQuery(query, new String[]{"%" + inputTextBrand + "%"});

【讨论】:

    【解决方案2】:

    单引号弄乱了您的 sql 查询,这是相当严重的,因为有人可以使用您的文本框对您的数据库执行 SQL 注入攻击。

    这里已经回答了处理方法:Android Quotes within an SQL query string

    【讨论】:

      猜你喜欢
      • 2014-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多