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 是“user”,我就得到了所有记录。 看起来 sqllite 检查表结构,并返回给我所有记录,因为该列的名称等于我正在使用的值 - user。
In my app I have one DB table with that structure:
user TEXT | token text
When I'm doing request to check if this user exist in table, like that:
String whereClause = COLUMN_USER + "==\"" + userName + "\"";
Cursor c = db.query(TABLE_USERS, new String[]{COLUMN_USER, COLUMN_TOKEN}, whereClause, null, null, null, null);
It works for all users. But if variable userName is "user" I got all records back.
Looks like sqllite checks table structure, and return to me all records 'cos name of this column equals to my value that I'm using - user.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我建议您参数化 where 子句中的参数:
I suggest you parameterize the arguments in your where clause:
解决这个问题的一个简单方法就是简单地将查询包含在:
尽管我确信有一个更优雅的解决方案。无论如何,应该对输入数据进行清理,如果您已经在检查无效内容,也许只需将“用户”添加到拒绝列表中即可?
A simple kludge to get rid of this problem would be simply to enclose the query in:
Although i'm sure there's a more elegant solution. Input Data sanitizing should be done anyways, and if you're already checking for invalids, maybe just add "user" into the list of rejecteds?