【问题标题】: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);