How do I order my SQLITE database in descending order, for an android app?

AndroidSqliteSql Order-By

Android Problem Overview


What is the most efficient method of showing my data in descending order?

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
}

Android Solutions


Solution 1 - Android

Query has two syntax, the syntax you are using, last column represents orderBy, you just need to specify on what column you want to do orderBy +"ASC" (or) orderBy +"DESC"

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

Refer this documentation to understand more about query() method.

Solution 2 - Android

return database.rawQuery("SELECT * FROM " + DbHandler.TABLE_ORDER_DETAIL +
                         " ORDER BY "+DbHandler.KEY_ORDER_CREATED_AT + " DESC"
			             , new String[] {});

Solution 3 - Android

Cursor c = scoreDb.query(Table_Name, score, null, null, null, null, Column+" DESC");

Try this

Solution 4 - Android

According to docs:

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

and your ORDER BY param means:

> How to order the rows, formatted as an SQL ORDER BY clause > (excluding the ORDER BY itself). Passing null will use the default > sort order, which may be unordered.

So, your query will be:

 Cursor cursor = db.query(TABLE_NAME, null, null,
            null, null, null, KEY_ITEM + " DESC", null);

Solution 5 - Android

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

This is my way of reading the record from database for list view in descending order. Move the cursor to last and move to previous record after each record is fetched. Hope this helps~

Solution 6 - Android

Cursor c = myDB.rawQuery("SELECT distinct p_name,p_price FROM products order by Id desc",new String[]{});

this works for me!!!

Solution 7 - Android

you can do it with this

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

Solution 8 - Android

SQLite ORDER BY clause is used to sort the data in an ascending or descending order, based on one or more columns. Cursor 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);

Solution 9 - Android

We have one more option to do order by

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

You can use this two method for order

Solution 10 - Android

About efficient method. You can use CursorLoader. For example I included my action. And you must implement ContentProvider for your data base. https://developer.android.com/reference/android/content/ContentProvider.html

If you implement this, you will call you data base very efficient.

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) {
    }

Solution 11 - Android

This a terrible thing! It costs my a few hours! this is my table rows :

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

Every time when I update the table , I will update the CURRENT_TIME for sort. But I found that it is not work.The result is not sorted what I want. Finally, I found that, the column "current_time" is the default row of sqlite.

The solution is, rename the column "cur_time" instead of "current_time".

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionCarla DessiView Question on Stackoverflow
Solution 1 - AndroidkosaView Answer on Stackoverflow
Solution 2 - AndroidmaheshsgrView Answer on Stackoverflow
Solution 3 - AndroidSonuView Answer on Stackoverflow
Solution 4 - AndroidCholetskiView Answer on Stackoverflow
Solution 5 - AndroidTriple KView Answer on Stackoverflow
Solution 6 - AndroidKarthickView Answer on Stackoverflow
Solution 7 - AndroidEzequiel GarcíaView Answer on Stackoverflow
Solution 8 - AndroidFakhriddin AbdullaevView Answer on Stackoverflow
Solution 9 - AndroidAmjad KhanView Answer on Stackoverflow
Solution 10 - AndroidVolodymyr StelmashchukView Answer on Stackoverflow
Solution 11 - AndroidmozziehhView Answer on Stackoverflow