Как заказать базу данных SQLITE в порядке убывания для приложения для Android? - PullRequest
58 голосов
/ 21 января 2012

Какой самый эффективный способ отображения моих данных в порядке убывания?

public String getRank() {

    String[] rank = new String[]{ KEY_ROWID };
    Cursor c = scoreDb.query(DATABASE_TABLE, rank, null, null, null, null, null);   //reading information from db.
    String rankResult = "";

    int iRow = c.getColumnIndex(KEY_ROWID); //Cursor looking for column setting equal to these ints.


    for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) { 
        //Move to first row - where cursor starts and moves to next row as long it is not after last row.
        rankResult = rankResult + c.getString(iRow) + "\n"; 
        //Returning value of row that it is currently on.
    }
    return rankResult;  //returning result
}

public String getName() {

    String[] name = new String[]{ KEY_NAME };
    Cursor c = scoreDb.query(DATABASE_TABLE, name, null, null, null, null, null);   //reading information from db.
    String nameResult = "";

    int iRow1 = c.getColumnIndex(KEY_NAME); //Cursor looking for column setting equal to these ints.


    for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) { 
        //Move to first row - where cursor starts and moves to next row as long it is not after last row.
        nameResult = nameResult + c.getString(iRow1) + "\n"; 
        //Returning value of row that it is currently on.
    }
    return nameResult;  //returning result
}

public String getScore() {

    String[] score = new String[]{ KEY_SCORE };
    Cursor c = scoreDb.query(DATABASE_TABLE, score, null, null, null,null, null);   //reading information from db.
    String scoreResult = "";

    int iRow2 = c.getColumnIndex(KEY_SCORE); //Cursor looking for column setting equal to these ints.


    for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) { 
        //Move to first row - where cursor starts and moves to next row as long it is not after last row.
        scoreResult = scoreResult + c.getString(iRow2) + "\n"; 
        //Returning value of row that it is currently on.
    }
    return scoreResult; //returning result
}

Ответы [ 11 ]

169 голосов
/ 21 января 2012

Запрос имеет два синтаксиса, синтаксис, который вы используете, последний столбец представляет orderBy, вам просто нужно указать, для какого столбца вы хотите сделать orderBy + "ASC" (или) orderBy + "DESC"

Cursor c = scoreDb.query(DATABASE_TABLE, rank, null, null, null, null, yourColumn+" DESC"); 

См. эту документацию, чтобы узнать больше о query() методе.

12 голосов
/ 20 ноября 2013
Cursor c = scoreDb.query(Table_Name, score, null, null, null, null, Column+" DESC");

Попробуйте это

11 голосов
/ 04 сентября 2014
return database.rawQuery("SELECT * FROM " + DbHandler.TABLE_ORDER_DETAIL +
                         " ORDER BY "+DbHandler.KEY_ORDER_CREATED_AT + " DESC"
                         , new String[] {});
5 голосов
/ 16 октября 2015

Согласно документам :

public Cursor query (String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit);

и вашему параметру ORDER BY означает:

Как упорядочить строки,отформатированный как предложение SQL ORDER BY (исключая сам ORDER BY).Передача null будет использовать порядок сортировки по умолчанию, который может быть неупорядоченным.

Итак, ваш запрос будет:

 Cursor cursor = db.query(TABLE_NAME, null, null,
            null, null, null, KEY_ITEM + " DESC", null);
4 голосов
/ 02 марта 2017
public List getExpensesList(){
    SQLiteDatabase db = this.getWritableDatabase();

    List<String> expenses_list = new ArrayList<String>();
    String selectQuery = "SELECT * FROM " + TABLE_NAME ;

    Cursor cursor = db.rawQuery(selectQuery, null);
    try{
        if (cursor.moveToLast()) {

            do{
                String info = cursor.getString(cursor.getColumnIndex(KEY_DESCRIPTION));
                expenses_list.add(info);
            }while (cursor.moveToPrevious());
        }
    }finally{
        cursor.close();
    }
    return expenses_list;
}

Это мой способ чтения записи из базы данных для просмотра списка в порядке убывания. Переместить курсор на последнюю и перейти к предыдущей записи после каждой записи. Надеюсь, это поможет ~

3 голосов
/ 05 июля 2016
Cursor c = myDB.rawQuery("SELECT distinct p_name,p_price FROM products order by Id desc",new String[]{});

это работает для меня !!!

2 голосов
/ 09 февраля 2018

Предложение SQLite ORDER BY используется для сортировки данных в порядке возрастания или убывания на основе одного или нескольких столбцов. Курсор c = scoreDb.query (DATABASE_TABLE, rank, null, null, null, null, yourColumn + "DESC");

SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.query(
            TABLE_NAME,
            rank,
            null,
            null,
            null,
            null,
            COLUMN + " DESC",
            null);
2 голосов
/ 19 мая 2016

вы можете сделать это с этим

Cursor cursor = database.query(
            TABLE_NAME,
            YOUR_COLUMNS, null, null, null, null, COLUMN_INTEREST+" DESC");
1 голос
/ 11 мая 2016

У нас есть еще один вариант сделать заказ на

public Cursor getlistbyrank(String rank) {
        try {
//This can be used
return db.`query("tablename", null, null, null, null, null, rank +"DESC",null );
OR
return db.rawQuery("SELECT * FROM table order by rank", null);
        } catch (SQLException sqle) {
            Log.e("Exception on query:-", "" + sqle.getMessage());
            return null;
        }
    }

Вы можете использовать эти два метода для заказа

0 голосов
/ 10 декабря 2016

Это ужасная вещь! Это стоит мне несколько часов! это строки моей таблицы:

private String USER_ID = "user_id";
private String REMEMBER_UN = "remember_un";
private String REMEMBER_PWD = "remember_pwd";
private String HEAD_URL = "head_url";
private String USER_NAME = "user_name";
private String USER_PPU = "user_ppu";
private String CURRENT_TIME = "current_time";

Cursor c = db.rawQuery("SELECT * FROM " + TABLE +" ORDER BY " + CURRENT_TIME + " DESC",null);

Каждый раз, когда я обновляю таблицу, я буду обновлять CURRENT_TIME для сортировки. Но я обнаружил, что это не работа. Результат не отсортирован, что я хочу. Наконец, я обнаружил, что столбец «current_time» является строкой по умолчанию sqlite. Решение состоит в том, чтобы переименовать столбец «cur_time» вместо «current_time».

...