Android 我的数据库查询显示按字母顺序对值进行排序
我一直试图在不寻求帮助的情况下解决这个问题,但我已经到了无法解决的地步 以下是我用来查询数据库的函数,为了保密,我不得不更改名称:Android 我的数据库查询显示按字母顺序对值进行排序,android,sqlite,Android,Sqlite,我一直试图在不寻求帮助的情况下解决这个问题,但我已经到了无法解决的地步 以下是我用来查询数据库的函数,为了保密,我不得不更改名称: public Cursor getAllItems(){ Cursor cursor = db.query(true, DATABASE_TABLE, new String []{KEY_NAME, KEY_1,KEY_2, KEY_3, KEY_4, KEY_5, KEY6, KEY_7, K
public Cursor getAllItems(){
Cursor cursor = db.query(true, DATABASE_TABLE, new String []{KEY_NAME, KEY_1,KEY_2, KEY_3,
KEY_4, KEY_5, KEY6,
KEY_7, KEY_8, KEY_9, KEY_10, KEY_11, KEY_12,
KEY_13}, null, null, null, null, null, null);
cursor.moveToFirst();
return cursor;
}
这是我填充使用xml创建的tablelayout的地方
public void populate(){
db = new DBAdapter(this);
TableLayout TL = (TableLayout)findViewById(R.id.table);
db.open();
c = db.getAllItems();
while(!c.isAfterLast()){
if(Integer.toString(c.getPosition())!=null){
TableRow TR = new TableRow(this);
TR.setId(c.getPosition());
TextView column1 = new TextView(this);
TextView column2 = new TextView(this);
TextView column3 = new TextView(this);
TR.setLayoutParams(new TableRow.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
column1.setGravity(0x01);
column1.setTextColor(0xff000000);
column1.setTextSize(2,20);
//column1.setText(c.getString(3));
column1.setText(Integer.toString(c.getPosition()));
TR.addView(column1);
column2.setGravity(0x01);
column2.setTextColor(0xff000000);
column2.setTextSize(2,20);
column2.setText(c.getString(0));
TR.addView(column2);
column3.setGravity(0x01);
column3.setTextColor(0xff000000);
column3.setTextSize(2,20);
//column3.setText(c.getString(1));
column3.setText(Integer.toString(TR.getId()));
TR.addView(column3);
TR.setOnLongClickListener(this);
TL.addView(TR);
1Total += c.getDouble(1);
2Total += c.getDouble(2);
}
c.moveToNext();
}
db.close();
如果我使用DDMS查看数据库,则所有内容都会按照正确的顺序显示,即插入表的顺序。但是,当我尝试在tablelayout中显示数据时,出于某种原因,它会根据KEY_NAME值组织值。因此,如果我像B-C-D-A-E那样将数据插入表中,它将用A-B-C-D-E填充我的表布局
奇怪的是,我将其设置为在任何给定行上长按一下,生成一个显示其余信息的dialogfragment,并且该信息是正确的。因此,如果使用上面的示例,我长时间单击显示的C行,那么我将实际获得D的数据,这是正确的
有什么想法吗?在SQLiteDatabase类的javadocs中,对于查询方法,它说传递null[对于排序顺序]将使用默认排序顺序,这可能是无序的。该null是您要传递的众多null之一,因此顺序可能是无序的,但显然它可能是有序的 也许可以尝试使用而不是查询 所以我认为你的情况是 公共查询字符串选择不同的键名称、键1、键2、键3, 键4,键5,键6,键7,键8,键9,键10,键11,键12, 数据库表中的键13,null
根据我的经验,androidsqlite以插入顺序返回rawQuery结果,尽管我不确定是否需要这样做。一个更可靠的方法是添加自动递增键列(基本上是给每行一个序列号),然后对查询结果进行排序。我将接受这个答案作为解决方案。他们认为我解决问题的方法基本上就是你在第二部分所说的。我已经有了一个自动递增的id,但我没有做的是在查询语句中返回id。我还对查询函数调用进行了如下编辑:Cursor Cursor=db.queryDATABASE_TABLE,新字符串[]{KEY_ROWID,KEY_NAME,KEY_1,KEY_2,KEY_3,KEY_4,5,KEY_6,KEY_7,KEY_8,KEY_9,KEY_10,KEY_11,KEY_12,KEY_13},null,null,null,null,KEY_ROWID;