'SQL in SQL中的问题 - Android

时间:2011-06-16 13:53:20

标签: android sqlite search

每当搜索查询包含'char my android app崩溃时,因为它认为'拆分字符串'。 这是一个例子 -

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

每当editTextSearch.getText().toString()包含'(例如 - “Ben's”)时,应用程序就会崩溃。

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

谢谢!

3 个答案:

答案 0 :(得分:4)

你真正应该做的是使用带有String数组的SQLiteDatabase方法rawQuery来选择args:

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

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

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

答案 1 :(得分:0)

转义'字符,不确定这是否是正确的语法,但这样的事情应该有效:

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

顺便注意sql注入。你应该验证editTextSearch字段以进行sql注入。

答案 2 :(得分:0)

你应该这样使用它:

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

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