我想执行如下查询:
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 + "\"" ;
如果用户在输入中输入双引号,它就会崩溃。当然,他们总是可以输入单引号和双引号。
你应该使用rawQuery
方法selectionArgs
参数:
p_query = "select * from mytable where name_field = ?";
mDb.rawQuery(p_query, new String[] { uvalue });
这不仅解决了你的报价问题,而且还减轻了SQL Injection
。
DatabaseUtils.sqlEscapeString适合我。该字符串用单引号括起来,字符串中的单引号变为双引号。尝试在getContentResolver()。query()中使用selectionArgs,但它根本不起作用。
你应该改变
p_query = "select * from mytable where name_field = '" + uvalue + "'" ;
喜欢
p_query = "select * from mytable where name_field = '" + android.database.DatabaseUtils.sqlEscapeString(uvalue)+ "'" ;
您是否尝试用2个单引号替换单引号?这适用于将数据输入数据库。
我更喜欢使用Sqlite在每个insert语句中转义单引号和双引号,如下所示:
String sqlite_stament = sqlite_stament.replace("'", "''").replace("\"", "\"\"");
我有同样的问题,但现在通过编写代码来解决,就像在你的情况下你想插入值uvalue。然后写为
uvalue= EditText( some user value );
uvalue = uvalue.replaceAll("'", "''");
p_query = "select * from mytable where name_field = '" + uvalue + "'" ;
mDb.rawQuery( p_query, null );
凉..!!