2017-04-22 18 views
0

現在、入力IDをデータベースで検索して単一の結果を得ることができるアプリケーションをセットアップしました。例えば。ユーザーはID = 1を入力し、IDのデータベースにはIDが1のレコードが含まれています。データベースを配列リストで検索し、結果の配列リストを取得する

ここでは、IDの範囲を含むarraylistを使用してデータベースをクエリして、例えば3、456、731など...データベースを検索したい私はまた、複数の値を特定のidにグループ化しました。たとえば、データベースが3のidを検索すると、5つの結果が検索されます。これらの結果のそれぞれの電話番号を別のarraylistに戻してログに出力できます。 。

私はこれを十分に説明してくれることを望みますが、詳細が必要な場合は質問してください。

以下のコードは、単一の結果を得るために使用されるクエリの変更バージョンを示していますが、複数の結果を得るために間違っていることはわかりません。

活動....私が間違った場所 は、あなたが見ることができる

// New array list which is going to be used to store values from the database 
ArrayList<String> contactsList; 

// This arrayList has been received from another activity and contains my id's 
ArrayList<String> contacts = intent.getStringArrayListExtra("groupCode"); 

// The database which i'm using 
ContactDBHandler contactDBHandler = new ContactDBHandler(getApplicationContext(), null, null, 1); 

//getAllValues is used to pass my arraylist id's to the database. 
contactsList = contactDBHandler.GetAllValues(contacts); 


// Simple log statement to loop and display results 
for (int i = 0; i < contactsList.size(); i++){ 

     Log.i("Numbers", contactsList.get(i)); 

    } 

ContactDBHandler

クエリ

// I'm telling it to get the contact number from the contact_list 
// when the groupcode matches the code recieved. 


public ArrayList<String> GetAllValues(ArrayList groupCode) 
{ 
    SQLiteDatabase db = this.getReadableDatabase(); 
    Cursor cursor = null; 
    String alarmName = ""; 
    ArrayList<String> list = new ArrayList<>(); 
    cursor = db.rawQuery("SELECT contact_number FROM contact_list WHERE grp_code=?", new String[]{groupCode+ ""}); 
    if (cursor.moveToFirst()) 
    { 
     do 
     { 
      list.add(cursor.getString(0)); 
     } 
     while (cursor.moveToNext()); 
    } 
    if (cursor != null && !cursor.isClosed()) 
    { 
     cursor.close(); 
    } 

    return list; 
} 

のおかげ?

+0

あなたは例外を取得しているか、出力が期待される結果と一致していませんか? –

+0

現在のところ、私のログは空であり、連絡先の配列リストをテストするだけで、IDの使用を待っていることを確認できます。 – user3403733

答えて

0

はこれを試してみてください:

cursor = db.rawQuery("SELECT contact_number FROM contact_list WHERE grp_code IN (" + TextUtils.join(",", Collections.nCopies(groupCode.size(), "?")) + ")", groupCode.toArray(new String[groupCode.size()])); 

あなたの現在のコードは、SQL形式でリストを渡すために失敗します。=はありませんINを使用する必要があるリストに対しては、単一の値のみをサポートします。


あなたのコードは、このようなクエリにつながる:

SELECT contact_number FROM contact_list WHERE grp_code=["some_id","other_id"] 

しかし、あなたが必要とする(と私のコードが生成する)は、次のとおりです。

SELECT contact_number FROM contact_list WHERE grp_code IN ('some_id','other_id') 

参考文献:

+0

こんにちはF43nd1r完璧な答え、また、ちょうどすぐにあなたが追加した小さなセクションを介して私を取ることができる – user3403733

+0

申し訳ありませんが、私は理解していません。どのセクションを参照していますか? – F43nd1r

+0

注:SQLインジェクションを防ぐために編集されました。 – F43nd1r

0

ArrayListをSQLQueryに渡すことはできません。同じフィールドの複数の値を調べるには、 'in'キーワードを使用する必要があります。

例:お使いの場合には

SELECT * FROM `table1` where column in ('element1', 'element2', 'element3') 

String str = ""; 
for(String s: groupCode){ 
    str = str+","+"\'"+s+"\'"; 
} 
//to remove the extra ' in the begining 
str = str.substring(1); 
return str; 

cursor = db.rawQuery("SELECT contact_number FROM contact_list WHERE grp_code IN (?)", new String[]{str}); 
関連する問題