SQLite中的Select语句不返回结果

时间:2015-12-24 16:15:17

标签: java android sqlite

然后,以下内容必须返回存储在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

以下是存储在DB中的内容: enter image description here

如何获取正确的密码?谢谢。

4 个答案:

答案 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语句中正确转义。