2017-04-22 200 views
0

我已经设置了一个应用程序,它目前可以在数据库中查找一个输入id,然后给出一个结果。例如。用户输入ID = 1,数据库包含一个ID为1的记录,然后返回名称或编号等...使用数组列表查询数据库并获取结果数组列表

现在我想通过查询我的数据库,使用一个包含一系列id例如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});