Как заказать базу данных SQLITE в порядке убывания для приложения для Android?

51

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

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
}
Теги:
sql-order-by

10 ответов

156
Лучший ответ

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

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

Обратитесь к документации this, чтобы больше узнать о методе запроса.

  • 0
    Я хочу, чтобы он был упорядочен по столбцу оценки, поэтому мне нужно поместить это только в столбец оценки или в два других тоже?
  • 0
    Достаточно просто набрать столбец оценки.
Показать ещё 16 комментариев
12
Cursor c = scoreDb.query(Table_Name, score, null, null, null, null, Column+" DESC");

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

  • 6
    Вы копируете только самый лучший и принятый ответ.
10
return database.rawQuery("SELECT * FROM " + DbHandler.TABLE_ORDER_DETAIL +
                         " ORDER BY "+DbHandler.KEY_ORDER_CREATED_AT + " DESC"
                         , new String[] {});
  • 0
    но как сохранить отсортированные изменения в исходной таблице?
3
Cursor c = myDB.rawQuery("SELECT distinct p_name,p_price FROM products order by Id desc",new String[]{});

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

  • 0
    Cursor cursor = db.rawQuery("SELECT * FROM " + TABLE_CHAL + " ORDER BY date(" + KEY_FORMATTED_DATE + ") ASC", null); где KEY_FORMATTED_DATE в YYYY-MM-DD , но он не работает. stackoverflow.com/questions/40129782/...
  • 0
    Я предлагаю вам использовать этот формат даты ДД-ММ-ГГГГ
3

Согласно docs:

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);
2
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;
}

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

2

вы можете сделать это с помощью этого

Cursor cursor = database.query(
            TABLE_NAME,
            YOUR_COLUMNS, null, null, null, null, COLUMN_INTEREST+" DESC");
1

У нас есть еще один способ сделать заказ

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

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

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".

0

Об эффективном методе. Вы можете использовать CursorLoader. Например, я включил свое действие. И вы должны внедрить ContentProvider для своей базы данных. https://developer.android.com/reference/android/content/ContentProvider.html

Если вы реализуете это, вы очень эффективно назовете свою базу данных.

public class LoadEntitiesActionImp implements LoaderManager.LoaderCallbacks<Cursor> {

   public interface OnLoadEntities {
       void onSuccessLoadEntities(List<Entities> entitiesList);
   }

    private OnLoadEntities onLoadEntities;

    private final Context context;

    private final LoaderManager loaderManager;

    public LoadEntitiesActionImp(Context context, LoaderManager loaderManager) {
        this.context = context;
        this.loaderManager = loaderManager;
    }

    public void setCallback(OnLoadEntities onLoadEntities) {
        this.onLoadEntities = onLoadEntities;
    }

    public void loadEntities() {
        loaderManager.initLoader(LOADER_ID, null, this);
    }

    @Override
    public Loader<Cursor> onCreateLoader(int id, Bundle args) {
        return new CursorLoader(context, YOUR_URI, null, YOUR_SELECTION, YOUR_ARGUMENTS_FOR_SELECTION, YOUR_SORT_ORDER);
    }

    @Override
    public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
    }

    @Override
    public void onLoaderReset(Loader<Cursor> loader) {
    }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню