【问题标题】:Problem with ' char in SQLite - AndroidSQLite中的'char问题 - Android
【发布时间】:2011-06-16 13:53:19
【问题描述】:

每当搜索查询包含 ' char 时,我的 android 应用程序就会崩溃,因为它认为 ' 会拆分字符串。 这是一个例子 -

Cursor selCur= myDataBase.rawQuery("SELECT * FROM drinks WHERE name like '%"+editTextSearch.getText().toString()+"%'", null);

只要 editTextSearch.getText().toString() 包含 '(例如 - “Ben's”),应用就会崩溃。

无论如何我都想不出来。 真的可以使用帮助。

谢谢!

【问题讨论】:

    标签: android sqlite search


    【解决方案1】:

    你真正应该做的是使用 SQLiteDatabase 方法 rawQuery 和一个字符串数组来选择参数:

    Cursor selCur= myDataBase.rawQuery("SELECT * FROM drinks WHERE name like ?", new String[] {"%" + editTextSearch.getText().toString() + "%"});

    你放一个问号? 代替你想要的字符串,然后把实际的字符串放在一个数组中,就像我上面的那样。您可以在查询字符串中包含多个 ?,只要确保您的数组大小与您拥有的 ? 数量匹配即可。

    编辑:同样对于使用like,您可能希望像我刚刚更改的那样在字符串数组中添加% 符号。我发现这会导致我期望的查询,而不是在查询字符串本身中包含%

    【讨论】:

      【解决方案2】:

      转义 ' 字符,不确定这是否是正确的语法,但这样的东西应该可以工作:

      Cursor selCur= myDataBase.rawQuery("SELECT * FROM drinks WHERE name like '%"+editTextSearch.getText().toString().replace("'", "''")+"%'", null);
      

      顺便提防sql注入。您应该为 sql 注入验证 editTextSearch 字段。

      【讨论】:

        【解决方案3】:

        你应该这样使用它:

        String args[] = new String[]{editTextSearch.getText().toString()};

        Cursor selCur= myDataBase.rawQuery("SELECT * FROM Drinks WHERE name like '%?%'", args);

        【讨论】:

          猜你喜欢
          • 2023-04-01
          • 1970-01-01
          • 1970-01-01
          • 2015-09-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多