簡體   English   中英

SQLite中的Select語句不返回結果

[英]Select statement in SQLite does not return result

然后,以下必須返回存儲在數據庫中的用戶的密碼

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

這是存儲在數據庫中的內容: 在此處輸入圖片說明

如何獲取正確的密碼? 謝謝。

變化" = " + userName到: " = '" + username+ "'"

更改為這個簡單的甲:

我認為這很有幫助。

更改為此:(包括引號)

String selectQuery = "SELECT  * FROM " + TABLE_USERS + " WHERE "
        + KEY_USERS_USERNAME + " = '" + userName + "'";

目前,您正在創建不帶引號的SQL字符串,因此不會將其視為字符串,而是將其視為列名。 不存在。

正確的方法是將username傳遞到rawQuery的第二個參數/ arg中的selectionArgs中,例如:

String selectQuery = "SELECT  * FROM " + TABLE_USERS + " WHERE "
        + KEY_USERS_USERNAME + " =  ?";

Cursor cursor = db.rawQuery(selectQuery, new String[]{ username });

這樣,如果您的username值為w甚至"w' ,它將在執行的結果sql語句中正確轉義。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM