2016-05-11 6 views
-1

私はあなたの名前、電子メール、アドレスなどの人の情報を記入することができますアンドロイドのためのEclipseのアプリを作った。このアプリで私は検索ボタンを含める必要があります1つまたは複数の情報が分かっている場合にデータベースに格納されます。例えば。データベースに保存されている人のメールアドレスしか覚えていないときは、一致するメールを検索してその人を見つけることができる必要があります。これは私がそうするために使用されるコードです: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(); 

それはNULL値が含まれていたとき、私は[]引数を変更した理由は、そうでない場合rawQueryが動作しないことです。しかし、このコードは、私が探していた人物を返しませんが、データベースの最初の人物を返します。 人のためのクエリー検索を行うことで、コードを簡素化し、それが実際にその名前を持つ人物を返すん名前のみ:最初のrawQueryと間違っていると、なぜそれは私が「人を返さない

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

何探していますが、単にデータベースの最初の人物ですが、2番目のrawQueryは適切な人物を返しますか?

+0

'または'を使用すると、条件の1つが検証された最初の行が返されますが、 'curs.moveToFirst();'最初の行だけを返しますので、しばらくしておいてください –

+0

あなたは共通のプロパティを持つ人物を持っています。あなたのカーソルのサイズを見てください。 – njzk2

+0

curs.moveToFirst();あなたのコメントのために、 –

答えて

0

私はORに問題があると思います。あなたは試してみることができますか? ORは通常はオプションであるためです。オプションでは、SQLエンジンに、一致する属性を持つ人を返すように指示しています。だからあなたは制限していませんが、多くの可能性を与えるabd ORは、多くのユーザーと結婚しているので、最初のものを取得しています。 ORを使用しないでください。必要な一意の結果を返すクエリを作成してみてください。

+0

私はそれも同様のものだと思っていました。これはおそらくnull値がデータベースにヌル値として格納されているためですが、それらがNULLのときにargs []の別の値を渡したので、データベースの値と完全に一致することはありません。だから私はORを使うことを選んだのです。その場合、一致するパラメータだけを検索すると思ったからです。 –

+0

いいえ。次に、値を持つものを検索しないでください。または、私はあなたがNULLでない場所を検索できるアイデアがあります。 SELECT * FROM table WHERE YourColumnは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 
} 
関連する問題