Мой запрос базы данных сортирует значения в алфавитном порядке - PullRequest
0 голосов
/ 29 сентября 2011

Я пытался разобраться в этой проблеме, не обращаясь за помощью, но я дошел до того, что, честно говоря, не могу ее выяснить.

Вот функция, которую я использую для запроса базы данных (япришлось сменить имя для конфиденциальности):

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.

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, все отображается в правильном порядке (порядок, в котором я вставляю в таблицу).Однако, когда я пытаюсь отобразить данные в виде таблицы, по какой-то причине он организует значения на основе значения KEY_NAME.Поэтому, если я вставлю данные в таблицу, например, «B - C - D - A - E», то моя таблица будет заполнена «A - B - C - D - E»

Что-то странное в том, чтоон настроен таким образом, что при длинном щелчке по любой данной строке создается фрагмент диалога, отображающий остальную информацию, и эта информация верна.Поэтому, если использовать приведенный выше пример, я долго нажимаю на отображаемую строку «C», тогда я получу данные для «D», что является правильным.

Есть идеи?

1 Ответ

0 голосов
/ 30 сентября 2011

В javadocs для класса SQLiteDatabase для метода запроса говорится, что «Передача null [для порядка сортировки] будет использовать порядок сортировки по умолчанию, который может быть неупорядоченным«.Этот ноль является одним из многих нулей, которые вы передаете, и поэтому порядок может быть неупорядоченным, но, очевидно, его можно заказатьвместо этого.

Возможно, вместо запроса используйте public Cursor rawQuery (String sql, String[] selectionArgs)?

Так что я думаю, что для вашего случая это будет что-то вроде

public Cursor rawQuery (String "SELECT DISTINCT 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 FROM DATABASE TABLE", null);

Мой опыт показывает, что Android SQLite возвращает результаты rawQuery в порядке вставки, хотя я не уверен, что это необходимо.Более надежный способ сделать это - добавить ключевой столбец автоинкремента - по сути, присваивая каждой строке порядковый номер, а затем упорядочивая результаты запросов по этому вопросу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...