2014-07-16 42 views
0

我prerry新的SQLite。我有一個用戶的詳細信息SQLite數據庫這樣SQLite的rawQuery錯誤

public static final String USER_ID = "email"; 
public static final String USER_NAME = "user_name"; 
public static final String PASSWORD = "password"; 

public static final String DATABASE_NAME = "molo.db"; 
public static final String DATABASE_TABLE = "user_profile"; 
private static final int DATABASE_VERSION = 1; 

//SQL to create new database 
private static final String DATABASE_CREATE = 
     "create table " + DATABASE_TABLE + 
     " (" + 
     USER_ID + " TEXT PRIMARY KEY NOT NULL UNIQUE , " + 
     USER_NAME + " TEXT NOT NULL, " + 
     PASSWORD + " TEXT NOT NULL);"; 

我可以註冊新用戶並能正常工作,我可以看到它時,我從模擬器拉數據庫中運行。 我現在正在嘗試使用數據庫上存儲的allready的用戶詳細信息登錄。我已經搜索並找到了一些解決方案,但是當我嘗試實現它時,我收到了錯誤。我試過這個:

public boolean verification(String Email) throws SQLException 
{ 
    Cursor c = database.rawQuery("SELECT * FROM "+ user_pofile +" WHERE "+ email + "=" + Email, null); 
    if (c!=null) 
    { 
     return true; 
    } 
    return false; 
} 

確定用戶的電子郵件allready是否存在於數據庫中。任何人都可以解釋爲什麼user_profileemail在上述rawQuery中突出顯示爲錯誤時,它們是正確的表名和列名?我是否缺少進口產品? Cheers

+0

請添加完整的logcat –

回答

3

user_pofile(typo there)和email不在雙引號中,因此它們被視爲Java變量名稱,並且在代碼中沒有這樣的名稱變量。

如果要使用變量,請用DATABASE_TABLEUSER_ID替換,或者將user_profileemail替換爲雙引號。

此外,您需要在單引號中引用SQL中的字符串文字或使用變量。

例如,

rawQuery("SELECT * FROM user_profile WHERE email = ? ", new String[] { Email }) 

此外,Cursor不會爲空,檢查null將沒有真正的工作。要查看查詢是否匹配任何內容,請檢查moveToFirst()是否返回true

+0

而「遊標」將始終不爲「null」。 –

+0

@CL。謝謝,這個問題在前面問題的格式不太明顯。 – laalto

+0

Ohke我沒有這個\t Cursor c = database.rawQuery(「SELECT * FROM user_pofile WHERE email =?」,new String [] {Email}); \t if(c.moveToFirst()) \t { \t return true; \t} \t return false; – Skim

0

,你在查詢的結尾有沒有用單引號包圍的字符串Email,一個正常的查詢語法是:

SELECT * FROM用戶表其中userid = '123'

所以你必須圍繞電子郵件變量有兩個單引號:"'"+Email+"'"

試試這個:

database.rawQuery("SELECT * FROM "+ user_pofile +" WHERE "+ email + "=" + "'"+Email+"'", null);