在一个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 );
凉..!!