2015-07-19 95 views
0

我遇到了這個查詢似乎並不工作的麻煩。 找不出來。這種方法有問題嗎? 我之前手動輸入了一個帳戶,並檢查數據庫不是空的。 遊標getCount方法系統地返回0。SQLite Android查詢

private static final int VERSION_BDD = 1; 
private static final String NOM_BDD = "account.db"; 
private static final String TABLE_ACCOUNT = "table_account"; 
private static final String COL_EMAIL = "Email"; 
private static final String COL_PASSWORD = "Password"; 

... 
... 

public Account getAccountWithEmail(String email){ 
    Cursor c = bdd.rawQuery("select * from table_account where Email = '" + email + "'", null); 
    return cursorToAccount(c); 
} 

private Account cursorToAccount(Cursor c){ 
    if (c.getCount() == 0){ 
     return null; 
    } 

    else{ 
     c.moveToFirst(); 
     Account account = new Account(); 
     account.setEmail(c.getString(NUM_COL_EMAIL)); 
     account.setPassword(c.getString(NUM_COL_PASSWORD)); 
     c.close(); 

     return account; 
    } 
} 
+0

閱讀有關rawQuery方法工作原理的文檔。你會在那裏找到你的答案。 –

+0

提供cursorToAccount方法。 –

+0

完成,但我認爲問題真的來自查詢 – Krypte

回答

0

更改爲:

public Account getAccountWithEmail(String email){ 
    Cursor c = bdd.rawQuery("SELECT * FROM " + TABLE_ACCOUNT + " WHERE " + COL_EMAIL "= ?", new String[]{email}); 
    return cursorToAccount(c); 
} 

閱讀:http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#rawQuery(java.lang.String,java.lang.String中[])

selectionArgs兩個你可能包括s-在查詢,責任條款? 將被來自selectionArgs的值替換。值將被綁定爲字符串 。

對於各種列名和表名,應該使用靜態變量,因爲它只是更好的做法(避免拼寫錯誤!)。至於查詢,你想使用selectionArgs和使用?對應於每個參數的數組索引

+0

感謝您的回答,它的工作,但沒有'@'字符像電子郵件地址的文本。但查詢似乎工作。我將使用用戶名而不是電子郵件地址更改我的帳戶定義。 PS:在「COL_EMAIL」後面忘了「+」,謝謝 – Krypte