2011-04-21 139 views
0

在我的应用程序,我有一个数据库表的结构: user TEXT |标记文本Android SQLite奇怪的问题

当我在做的请求,以检查是否该用户在表中,这样的:

String whereClause = COLUMN_USER + "==\"" + userName + "\""; 
Cursor c = db.query(TABLE_USERS, new String[]{COLUMN_USER, COLUMN_TOKEN}, whereClause, null, null, null, null); 

它适用于所有用户。但是,如果变量userName是“用户”,我将所有记录都备份回来。 看起来像sqllite检查表结构,并返回给我所有记录的这个列的COS名称等于我使用的价值 - 用户。

回答

1

我建议你参数的参数的WHERE子句中:

String whereClause = COLUMN_USER + "=?"; 
String [] whereArgs = { userName }; 
Cursor c = db.query(TABLE_USERS, new String[]{COLUMN_USER, COLUMN_TOKEN}, whereClause, whereArgs, null, null, null); 
+0

谢谢!这对我行得通! – Redwid 2011-04-21 08:36:36

0

一个简单的组装机来摆脱这个问题将是简单地附上该查询:

if (userName =! "user") { 
//code here 
} else { 
//open dialog about invalid username 
} 

虽然我敢肯定有一个更好的解决方案。输入数据消毒应该无论如何都应该完成,如果您已经在检查残疾人,可能只需将“用户”添加到拒绝列表中?

+0

应用程序是一个在线服务客户。几乎所有的名字都应该是有效的。 – Redwid 2011-04-21 08:37:24