Android在sql查询字符串中引用

时间:2009-08-18 20:05:52

标签: android sqlite

我想执行如下查询:

uvalue = EditText( some user value );
p_query = "select * from mytable where name_field = '" +  uvalue + "'" ;
mDb.rawQuery( p_query, null );

如果用户在输入中输入单引号,则会崩溃。如果您将其更改为:

p_query = "select * from mytable where name_field = \"" +  uvalue + "\"" ;
如果用户在输入中输入双引号,它就会崩溃。 当然,他们总是可以输入单引号和双引号。

6 个答案:

答案 0 :(得分:129)

您应该使用rawQuery方法的selectionArgs参数:

p_query = "select * from mytable where name_field = ?";
mDb.rawQuery(p_query, new String[] { uvalue });

这不仅可以解决您的报价问题,还可以缓解SQL Injection

答案 1 :(得分:14)

DatabaseUtils.sqlEscapeString为我工作正常。该字符串用单引号括起来,字符串中的单引号变为双引号。 尝试在getContentResolver()。query()中使用selectionArgs,但它根本不起作用。

答案 2 :(得分:3)

你应该改变

p_query = "select * from mytable where name_field = '" +  uvalue + "'" ;

喜欢

p_query = "select * from mytable where name_field = '" + android.database.DatabaseUtils.sqlEscapeString(uvalue)+ "'" ;

答案 3 :(得分:2)

您是否尝试用2个单引号替换单引号?这适用于将数据输入数据库。

答案 4 :(得分:1)

我更喜欢使用Sqlite在每个insert语句中转义单引号和双引号:

 String sqlite_stament = sqlite_stament.replace("'", "''").replace("\"", "\"\"");

答案 5 :(得分:0)

我有同样的问题,但现在只需编写代码即可解决 在你的情况下,你想插入值uvalue。然后写为

uvalue= EditText( some user value );
uvalue = uvalue.replaceAll("'", "''");
p_query = "select * from mytable where name_field = '" +  uvalue + "'" ;
mDb.rawQuery( p_query, null );

凉爽.. !!