然后,以下内容必须返回存储在DB
中的用户的密码public String getPasswordByUsername(String userName)
{
SQLiteDatabase db = this.getReadableDatabase();
String selectQuery = "SELECT * FROM " + TABLE_USERS + " WHERE "
+ KEY_USERS_USERNAME + " = " + userName;
Cursor cursor = db.rawQuery(selectQuery, null);
if (cursor.getCount() < 1) {
cursor.close();
return "NOT EXIST";
}
cursor.moveToFirst();
String password = cursor.getString(cursor.getColumnIndex("password"));
cursor.close();
return password;
}
当我尝试获取用户“w”的密码时,我得到:
12-24 10:54:23.639: E/AndroidRuntime(11237): FATAL EXCEPTION: main
12-24 10:54:23.639: E/AndroidRuntime(11237): Process: com.example.doit, PID: 11237
12-24 10:54:23.639: E/AndroidRuntime(11237): android.database.sqlite.SQLiteException: no such column: w (code 1): , while compiling: SELECT password FROM users WHERE username = w
如何获取正确的密码?谢谢。
答案 0 :(得分:3)
将" = " + userName
更改为:" = '" + username+ "'"
答案 1 :(得分:2)
改为这个简单的形式: -
String dateQuery =“SELECT * FROM user where username ='”+ USERNAME +“'”;
光标数据= db.rawQuery(dateQuery,null);
我认为它很有帮助。
答案 2 :(得分:1)
更改为:(包括引号)
String selectQuery = "SELECT * FROM " + TABLE_USERS + " WHERE "
+ KEY_USERS_USERNAME + " = '" + userName + "'";
目前您正在创建一个没有引号的SQL字符串,因此不会将其视为字符串,而是将其视为列名。哪个不存在。
答案 3 :(得分:1)
正确的方法是将username
传递到selectionArgs
的第2个参数/ arg中的rawQuery
,例如:
String selectQuery = "SELECT * FROM " + TABLE_USERS + " WHERE "
+ KEY_USERS_USERNAME + " = ?";
Cursor cursor = db.rawQuery(selectQuery, new String[]{ username });
这样,如果您的username
值为w
或"w'
,则会在生成的sql语句中正确转义。