2013-06-01 53 views
1

我想建立一個方法來確定在插入之前用戶是否存在於Android sqlite數據庫中,我試圖建立這個方法來返回行數,但是如果我嘗試這樣Android sqlite返回查詢行數

String[] columns = new String[] { SCREEN_NAME, NAME, PROFILE_IMAGE_URL, 
      USER_ID }; 
    Cursor c = friendsDatabase.query(DATABASE_TABLE, columns, SCREEN_NAME 
      + " LIKE '" + screenName + "%'", null, null, null, null); 
    c.moveToFirst(); 
    Integer count= c.getCount(); 
    c.close(); 

    return count; 

我得到的行數返回沒問題,不過分鐘我期待這樣的

String[] columns = new String[] { SCREEN_NAME, NAME, PROFILE_IMAGE_URL, 
      USER_ID }; 
    Cursor c = friendsDatabase.query(DATABASE_TABLE, columns, SCREEN_NAME 
      + " = '" + screenName + "'", null, null, null, null); 
    c.moveToFirst(); 
    Integer count= c.getCount(); 
    c.close(); 

    return count; 

完全匹配像匹配的搜索,我得到0行每次不管它匹配與否,林不知道如果我的SQL或也許我使用了錯誤的參數做出的聲明,任何幫助將很長的路要走感謝

+0

你爲什麼使用LIKE?你的LIKE查詢正在尋找一個前綴匹配,而不是象'='那樣的完整匹配。您最好在屏幕名稱列上添加適當的唯一約束並捕獲異常。 –

+0

我正在使用LIKE作爲我得到的工作的一個例子,我需要的是爲完全匹配而返回的行數,但是我似乎無法在第二個示例中獲得該工作 –

+0

您是否擁有該屏幕名稱在你的數據庫?數據庫中的屏幕名稱和您查詢的屏幕名稱僅在不同情況下有所不同? –

回答

2

試試這個代碼,它可能工作

使用原始查詢

Cursor mCount= db.rawQuery("select count(*) from "+ DATABASE_TABLE +" where "+SCREEN_NAME+"='" + SCREEN_NAME + "'", null); 
mCount.moveToFirst(); 
int count= mCount.getInt(0); 
mCount.close(); 

或者使用相同的代碼,但不同

db.query(DATABASE_TABLE , columns, SCREEN_NAME=?, new String[] { SCREEN_NAME}, null, null, null); 
c.moveToFirst(); 
Integer count= c.getCount(); 
c.close();