在一个sql查询string中的Android引号

我想要执行如下的查询:

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

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

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

如果用户在input中input双引号,则会崩溃。 当然,他们总是可以input单引号和双引号。

你应该使用[ rawQuery ]( http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#rawQuery (java.lang.String,java.lang.String [])方法的selectionArgs参数:

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

这不仅解决了你的报价问题,而且减轻了SQL Injection

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

你有没有尝试用2个单引号replace单引号? 这适用于将数据input到数据库。

我更喜欢在每个插入语句中用Sqlite转义单引号和双引号,如下所示:

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

你应该改变

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

喜欢

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

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

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

凉..!!