我想执行如下查询:
uvalue = EditText( some user value );
p_query = "select * from mytable where name_field = '" + uvalue + "'" ;
mDb.rawQuery( p_query, null );
Run Code Online (Sandbox Code Playgroud)
如果用户在输入中输入单引号,则会崩溃.如果您将其更改为:
p_query = "select * from mytable where name_field = \"" + uvalue + "\"" ;
Run Code Online (Sandbox Code Playgroud)
如果用户在输入中输入双引号,它就会崩溃.当然,他们总是可以输入单引号和双引号.
Jos*_*ger 129
您应该使用rawQuery方法的selectionArgs参数:
p_query = "select * from mytable where name_field = ?";
mDb.rawQuery(p_query, new String[] { uvalue });
Run Code Online (Sandbox Code Playgroud)
这不仅可以解决您的报价问题,还可以减轻问题SQL Injection.
小智 14
DatabaseUtils.sqlEscapeString适合我.该字符串用单引号括起来,字符串中的单引号变为双引号.尝试在getContentResolver().query()中使用selectionArgs,但它根本不起作用.
小智 5
你应该改变
p_query = "select * from mytable where name_field = '" + uvalue + "'" ;
Run Code Online (Sandbox Code Playgroud)
喜欢
p_query = "select * from mytable where name_field = '" + android.database.DatabaseUtils.sqlEscapeString(uvalue)+ "'" ;
Run Code Online (Sandbox Code Playgroud)