在我正在构建的应用程序中,我需要访问一个sqlite数据库并运行一个查询,其中我在“where”子句中有一个名称。此名称是随机生成的(来自另一个查询),并分配给一个全局变量。这个变量然后被传递到另一个使用它的查询(在另一个方法中)。有点像这样:
public class DatabaseAccess {
public static String player_name;
Cursor c = null;
public String getPlayerName(String string) {
c = db.rawQuery("select player_name FROM name_table where level = 1 ORDER BY RANDOM() LIMIT 1", new String[]{});
StringBuffer buffer = new StringBuffer();
while (c.moveToNext()) {
String diff = c.getString(0);
buffer.append("" + diff);
}
player_name = buffer.toString();
return buffer.toString();
}
public String getClue(String string) {
c = db.rawQuery("SELECT clue FROM clue_table where player_name = '" + player_name +"'", new String[]{});
StringBuffer buffer = new StringBuffer();
while (c.moveToNext()) {
String diff = c.getString(0);
buffer.append("" + diff);
}
return buffer.toString();
}
问题是数据库中的一些名称具有 '
其中的符号(例如dara o'briain)。
当出现这样的名称时,我的代码会崩溃并显示错误消息:
Caused by: android.database.sqlite.SQLiteException: near "Briain": syntax error (code 1): , while compiling: select alt_name FROM player_names where player_name = 'Dara O'Briain'
看起来好像是 '
作为结束字符串的方法,这将导致错误的查询。
如何在代码中解释这些示例?
1条答案
按热度按时间tjjdgumg1#
好吧,那是空的
String[]
传递给调用的数组正是参数应该到达的位置。因此,查询应该如下所示:只需在需要插入参数的地方打个问号。它们将按顺序插入,数组中可以有更多这些。
司机会帮你避开任何撇号。如果你不以任何方式逃避用户的输入,你会冒很大的风险。假设玩家的名字来自用户在应用程序中的输入,他们会突发奇想地在搜索框中写道:
如果只是将其粘贴到查询中,它现在看起来如下所示:
你得到你的数据作为搜索功能的免费奖励。