2011-06-16 30 views
0

每当搜索查询包含'我的android应用程序崩溃时,因为它认为'分割字符串。 下面是一个例子 -SQLite中的字符问题 - Android

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

每当editTextSearch.getText().toString()包含“(例如 - ‘本公司’)的应用程序崩溃。

反正我想不出来。 真的可以使用帮助。

谢谢!

回答

4

你真正应该做的是使用SQLiteDatabase方法rawQuery与一个String数组选择ARGS:

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

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

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

0

逃脱'字,不知道这是正确的语法,但这样的事情应该工作:

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

的方式当心SQL注入。你应该验证editTextSearch字段的SQL注入。

0

,应使用这种方式:

字符串ARGS [] =新的String [] {editTextSearch.getText()的toString()};游标selCur = myDataBase.rawQuery(“SELECT * FROM drinks WHERE name like'%?%'”,args);