2016-05-11 22 views
-1

我在android中的eclipse中創建了一個應用程序,您可以在其中填寫個人信息,如姓名,電子郵件,地址等。在此應用程序中,我需要包含一個搜索按鈕,它將搜索保存在數據庫,當一個或多個信息已知時。例如。當我只記得保存在數據庫中的人的電子郵件地址時,我需要通過搜索匹配的電子郵件來找到該人。這是我用這樣的代碼:爲什麼我的sqlite數據庫中的rawquery會給我錯誤的人?

public Person getPerson(String naam, String adres, String email, String geslacht, 
     String leeftijd, String geboortedatum){ 
    SQLiteDatabase db= this.getReadableDatabase(); 
    Cursor curs=db.rawQuery("SELECT * FROM personen WHERE name = ? OR adress = ? " 
      + "OR email = ? OR gender = ? OR age = ? OR birthday = ?", 
      new String[]{naam==null?"'":naam, adres==null?"'":adres, 
        email==null?"'":email, geslacht==null?"'":geslacht, 
          leeftijd==null?"'":leeftijd, geboortedatum==null?"'":geboortedatum}); 
    if(curs!=null) 
     curs.moveToFirst(); 

我改變了ARGS []當它包含一個空值,否則該rawQuery將無法正常工作的原因。但是,此代碼不會返回我正在搜索的人員,但它只是返回數據庫中的第一個人。 當通過使一個人的查詢搜索簡化了代碼只命名它實際上與該名返回的人:

Cursor curs=db.rawQuery("SELECT * FROM personen WHERE name = ?", new String[]{naam}); 
if(curs!=null) 
    curs.moveToFirst(); 

有什麼不對的第一rawQuery,爲什麼不還給我的人m尋找,但只是數據庫中的第一人,而第二個rawQuery確實會返回正確的人?

+0

使用'or'將返回其中一個條件被驗證的第一行,但是您的'curs.moveToFirst();'將只返回第一行,所以你必須做一段時間 –

+0

你有人與財產的共同點。看看你的光標的大小。 – njzk2

+0

curs.moveToFirst();只返回結果的第一行 –

回答

0

我想問題是與或。你可以試試看,看看?因爲OR通常意味着可選。我的意思是可選的是,你告訴sql引擎返回與它匹配的任何屬性的人。所以你不是限制,而是給予很多可能性,或者是以許多用戶結束,因此獲得第一個。不要使用OR。嘗試創建一個返回您想要的唯一結果的查詢。

+0

我認爲它也會是這樣的,但是用AND我會得到一個錯誤。這可能是因爲空值實際上是作爲空值存儲在數據庫中的,但是當它們爲空時,我在args []中給出了另一個值的參數,因此永遠不會與數據庫中的值完全匹配。這就是爲什麼我選擇使用OR,因爲我認爲它只會在這種情況下搜索匹配參數。 –

+0

好的。那麼爲什麼不搜索具有值的人或者我有一個想法,你可以搜索哪裏不是空值。如:SELECT * FROM table WHERE YourColumn IS NOT NULL;所以它會考慮或僅將其與值進行比較。 –

0
public Person getPerson(String naam, String adres, String email, String geslacht, 
      String leeftijd, String geboortedatum){ 
     SQLiteDatabase db= this.getReadableDatabase(); 
     Cursor curs=db.rawQuery("SELECT * FROM personen WHERE name = ? OR adress = ? " 
       + "OR email = ? OR gender = ? OR age = ? OR birthday = ?", 
       new String[]{naam==null?"'":naam, adres==null?"'":adres, 
         email==null?"'":email, geslacht==null?"'":geslacht, 
           leeftijd==null?"'":leeftijd, geboortedatum==null?"'":geboortedatum}); 
     if(curs!=null) 
      if (curs.moveToFirst()){ 
       while(curs.hasNext){ 
//Your code, this will return all the rows of your sql,use curs.next() to get a row 
} 
相關問題