2017-06-25 17 views
0

私はこの関数を 'id'を渡して、これを使ってDataを返すDatabaseSQLite.java(Android App) id。Integerをバイナリと配列に変換し、配列と行を比較し、配列の値が1であるところを選択します

public Cursor getData(Integer id){ 
    SQLiteDatabase db = this.getWritableDatabase(); 
    String query = "SELECT * FROM " + TABLE_NAME + " WHERE " + COL1 +" = " + id; 
    Cursor data = db.rawQuery(query, null); 
    return data; 
} 

そして、これは15行と私のSQLiteのテーブルです:私は合格し、この機能のために '12' の場合、例えば

enter image description here

、それは行を返します12

しかし、私の疑問は、このInteger idをバイナリに変換してから配列に変換し、この配列をTABLE_NAMEの行と比較し、配列値1の行だけを選択することです。

例えば、ここで私はあなたの4例与えるためにバイナリに、この4つの数字を変換:

enter image description here

を次に私はこの4つの配列を有するであろうが(背景青色1つの値を有することである)

0123:enter image description here

ので、パス1、5、59または32767または私の機能のための任意の他の数の場合、私は、このそれぞれの結果をそれぞれ例えば1、5、59、32767を希望します

どのように私を助けることができるのだろうか?

答えて

1

idをバイナリ文字列に変換し、値が1のインデックスごとに引数インデックス+ 1getDataと呼んでください。これにより、すべての行が1つずつフェッチされます。

String binary = Integer.toBinaryString(id); 

for(int i = 0; i < binary.length(); i++) { 
    if(binary.charAt(i) == '1') { 
     Cursor data = getData(i+1); // get (i+1)th row 
     // do something 
    } 
} 

また、一度

public Cursor getData(Integer id) { 
    SQLiteDatabase db = this.getWritableDatabase(); 
    String binary = Integer.toBinaryString(id); 

    // buliding query SELCT * FROM TABLE WHERE id in (id1, id2, id3, id4 ...) 
    String query = "SELECT * FROM " + TABLE_NAME + " WHERE " + COL1 + "in ("; 
    boolean isFirst = true; // to avoid appending ',' before first id 

    for(int i = 0; i < binary.length(); i++) { 
     if(binary.charAt(i) == '1') { 
      if(!isFirst) { 
       query += ", "; 
       isFirst = false; 
      } 
      query += (i+1); 
     } 
    } 
    query += ")"; 

    Cursor data = db.rawQuery(query, null); 
    return data; 
} 
+0

ですべての行を選択するにはgetdataを変更することができます(私は、「公共のカーソルのgetData(整数ID)」関数を呼び出すしたいと思いますし、それがこの質問に疑問を返します私はちょうどそれのためにこの機能が必要です)、だから私はあなたのsugestionでこの機能を変更する必要があります、どのようになりますか?私はここで試したが、うまくいかなかった。 – kfm

+0

私はintergerのバイナリへの変換をテストして動作しましたが、このバイナリ文字列を写真の例のようなテーブルの行と比較する必要があります。ここで私のselect文は次のようになります: 'for(int i = 0; i kfm

+1

SELECTステートメントは、ループ内で呼び出される 'getdata'メソッド内にあります。 –

関連する問題