Android 使用撇号(';)注册用户名

Android 使用撇号(';)注册用户名,android,sqlite,Android,Sqlite,我在Android上有一个应用程序,用户必须注册,并且必须输入一个名字。问题是当用户在自己的名字中引入撇号(')时(例如Satck'developers)。然后在应用程序中,我发现数据库SQLite有问题 更新用户集name='othername'其中name='Stack'developers'`) 这会导致SQLiteException 我如何在Android中处理这种情况?我怎么能不允许用户在中加撇号(') 多谢各位 如果不想允许,则需要在将输入存储到数据库之前验证输入。差不多 if(ed

我在Android上有一个应用程序,用户必须注册,并且必须输入一个名字。问题是当用户在自己的名字中引入
撇号(')
时(例如Satck'developers)。然后在应用程序中,我发现数据库SQLite有问题

更新用户集name='othername'其中name='Stack'developers'`)

这会导致SQLiteException

我如何在Android中处理这种情况?我怎么能不允许用户在
中加撇号(')


多谢各位

如果不想允许,则需要在将输入存储到数据库之前验证输入。差不多

if(editText.getText().toString.contains("'")){
// show invalid error message
} else{
// store to db
}

您需要转义保留字符以避免SQL注入。有一些内置的方法可以自动实现这一点

int update(SQLiteDatabase db, String originalName, String newName) {
    ContentValues values = new ContentValues();
    values.put("name", newName);
    return db.update("user", values, "name = ?", new String[]{originalName});
}

好主意!万岁!非常感谢。您真的使用原始sql查询进行更新吗?不要这样做,因为它容易受到SQL注入的攻击。好了->嗨,克里斯托弗!我不会对任何句子使用原始sql查询。我写的语法错误!更新语句如下:
db.update(TABLE_USER,value,“name=”+USER_name+“”,null)谢谢你的建议!嗨,布莱德!非常有趣。你说得对!但我不太清楚这个方法是如何工作的,也不清楚其他内置方法是如何找到转义保留字符的,而不仅仅是撇号(')。如何在editText中实现在BBDD中注册之前在何处获取名称?谢谢。基本上,
SQLiteDatabase
上所有使用
String[]
参数的方法都会正确地转义这些值,并将它们用作查询体中所有“?”的替换。还转义了contentvalue。转义将由本机SQLite代码执行。您只需将
EditText.getText().toString()
中的值传递到
String[]
数组或ContentValues中,具体取决于您使用的方法。