Android:从SQLite数据库中选择数据-建议

Android:从SQLite数据库中选择数据-建议,android,Android,请给我一些建议,如果我有类似于select*from order\u list,其中order\u number=?的查询,那么从数据库中选择数据的有效方法是什么?在表中,我有更多具有公共订单号的条目(在我的例子中),我想为具有相同订单号的条目创建列表,然后在ListView中进行拍摄。我不知道首先选择所有订单号,然后在foreach循环中选择并创建列表是否有效,或者是否存在更好的方法。我试着找一些例子,但没有成功。我应该如何解决这个问题?非常感谢。非常感谢您的帮助。在SQL中使用GROUPBY

请给我一些建议,如果我有类似于
select*from order\u list,其中order\u number=?
的查询,那么从数据库中选择数据的有效方法是什么?在表中,我有更多具有公共订单号的条目(在我的例子中),我想为具有相同订单号的条目创建列表,然后在
ListView
中进行拍摄。我不知道首先选择所有订单号,然后在foreach循环中选择并创建
列表
是否有效,或者是否存在更好的方法。我试着找一些例子,但没有成功。我应该如何解决这个问题?非常感谢。非常感谢您的帮助。

SQL
中使用
GROUPBY

SELECT *
FROM table_name
WHERE column_name = yourvalue
GROUP BY your_columnname

groupby
与聚合函数一起使用,将结果集按一列或多列进行分组。在您的情况下,它将根据您的
订单号对您的记录进行分组。分组后,您可以分配给列表视图或任何您想要的内容。

您可以使用您这样想的内容:

"select col1,col2,col3 from table   WHERE order_number = ? ", new String[]{YOUR_VARIABLE_HERE};
helper = new YourDatabaseHelper(this);

Object[] objectScheme = merchandisingHelper.getData(retId);
arrayListSchemeProductName = (ArrayList<String>) objectScheme[0];
arrayListSchemeProductId = (ArrayList<String>) objectScheme[1];
例如:

 public Object[] getData(String Id) {
    Cursor c = null;
    ArrayList<String> arrayListProductName = new ArrayList<String>();
    ArrayList<String> arrayListProductId = new ArrayList<String>();
    db=helper.getWritableDatabase();
    c = db.rawQuery("select distinct  Column1,Column2 from Table1inner join Table2 on Table1.anyId = Table2.anyId  Table2.Id = ?", new String[]{Id});   
    c.moveToFirst();
    while(!c.isAfterLast())
    {
        arrayListProductName.add(c.getString(c.getColumnIndex("Column1")));
        arrayListProductId.add(c.getString(c.getColumnIndex("Column2 ")));
        c.moveToNext();
    }
    c.close();
    db.close();
    return new Object[]{arrayListProductName,arrayListProductId};
    }
public对象[]获取数据(字符串Id){
光标c=null;
ArrayList arrayListProductName=新的ArrayList();
ArrayList arrayListProductId=新的ArrayList();
db=helper.getWritableDatabase();
c=db.rawQuery(“从Table1中选择distinct Column1,Column2在Table1.anyId=Table2.anyId Table2.Id=?”,新字符串[]{Id});
c、 moveToFirst();
而(!c.isAfterLast())
{
add(c.getString(c.getColumnIndex(“Column1”));
add(c.getString(c.getColumnIndex(“Column2”));
c、 moveToNext();
}
c、 close();
db.close();
返回新对象[]{arrayListProductName,arrayListProductId};
}
在活动课上:

"select col1,col2,col3 from table   WHERE order_number = ? ", new String[]{YOUR_VARIABLE_HERE};
helper = new YourDatabaseHelper(this);

Object[] objectScheme = merchandisingHelper.getData(retId);
arrayListSchemeProductName = (ArrayList<String>) objectScheme[0];
arrayListSchemeProductId = (ArrayList<String>) objectScheme[1];
helper=newyourdatabasehelper(这个);
Object[]objectScheme=merchandisingHelper.getData(retId);
arrayListSchemeProductName=(ArrayList)objectScheme[0];
arrayListSchemeProductId=(ArrayList)objectScheme[1];
希望这对你有帮助


谢谢

如果我理解正确,您想知道:

  • 使用
    WHERE order\u number=?
    子句进行筛选

  • 加载所有内容,然后在循环中过滤

  • 那么1是一个更好的解决方案,它将避免大量不必要的对象创建。如果您有很多行,在
    订单号
    列上添加索引可能会很有趣

    如果要在
    列表视图
    中显示结果,最好的解决方案是使用。
    这非常有效,因为您只需在
    列表视图需要数据时加载数据。

    查询中的SelectionAgs只能包含一个参数?我的意思是如果我想在同一时间选择订单号为1,2,…,n的项目?是否可以在新字符串[]{someArray[]}的地方做某事是的,您可以有多个参数。请参见其中的id1=?和id2=?id3=?,新字符串[]{ID1_VAL,ID2_VAL,id3_VAL,}你只需要处理第一个?值应位于新字符串[]{first_ARGS}的第一位。