使用数组列表查询数据库并获取结果数组列表
我已经设置了一个应用程序,它目前可以在数据库中查找一个输入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;
}
感谢 你能看到我在哪里呢?
试试这个:
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')
参考文献:
嗨F43nd1r完美的答案,你也可以快速带我通过你添加的小部分 – user3403733
对不起,我不明白。你指的是哪一部分? – F43nd1r
注意:已编辑以防止sql注入 – F43nd1r
您无法将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});
您是否获得一个异常或不输出预期的结果不匹配? –
目前我的日志只是空的,也只是测试我的联系人数组列表,我可以确认它有ID等待使用。 – user3403733