web-dev-qa-db-fra.com

Comment commander ma base de données SQLITE dans l'ordre décroissant, pour une Android app?

Quelle est la méthode la plus efficace pour afficher mes données par ordre décroissant?

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
}
60
Carla Dessi

Query a deux syntaxes, la syntaxe que vous utilisez, la dernière colonne représente orderBy, il vous suffit de spécifier sur quelle colonne vous souhaitez effectuer orderBy + "ASC" (ou) orderBy + "DESC"

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

Reportez-vous à this documentation pour en savoir plus sur la méthode query().

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

Essaye ça

12
Sonu
return database.rawQuery("SELECT * FROM " + DbHandler.TABLE_ORDER_DETAIL +
                         " ORDER BY "+DbHandler.KEY_ORDER_CREATED_AT + " DESC"
                         , new String[] {});
11
maheshsgr
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;
}

C'est ma façon de lire l'enregistrement de la base de données pour la vue liste par ordre décroissant. Déplacez le curseur en dernier et passez à l'enregistrement précédent après chaque enregistrement. J'espère que cela aide ~

5
Triple K

Selon docs :

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

et votre ORDER BY param signifie:

Comment ordonner les lignes, formatées comme une clause SQL ORDER BY (à l'exclusion de ORDER BY elle-même). Passer la valeur null utilisera l'ordre de tri par défaut, qui peut ne pas être ordonné.

Donc, votre requête sera:

 Cursor cursor = db.query(TABLE_NAME, null, null,
            null, null, null, KEY_ITEM + " DESC", null);
5
Choletski
Cursor c = myDB.rawQuery("SELECT distinct p_name,p_price FROM products order by Id desc",new String[]{});

ça marche pour moi !!!

3
Karthick

tu peux le faire avec ça

Cursor cursor = database.query(
            TABLE_NAME,
            YOUR_COLUMNS, null, null, null, null, COLUMN_INTEREST+" DESC");
2
Ezequiel García

La clause SQLite ORDER BY permet de trier les données dans un ordre croissant ou décroissant, en fonction d'une ou de plusieurs colonnes. Curseur c = scoreDb.query (DATABASE_TABLE, rang, null, null, null, null, votreColonne + "DESC");

SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.query(
            TABLE_NAME,
            rank,
            null,
            null,
            null,
            null,
            COLUMN + " DESC",
            null);
2

Nous avons encore une option à faire pour commander par

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

Vous pouvez utiliser cette méthode pour passer commande

1
Amjad Khan

C'est une chose terrible! Cela me coûte quelques heures! ce sont mes lignes de table:

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

Chaque fois que je mettrai à jour la table, je mettrai à jour CURRENT_TIME pour le tri. Mais j'ai trouvé que ce n'est pas un travail. Le résultat n'est pas trié comme je le veux. Enfin, j’ai trouvé que la colonne "current_time" était la ligne par défaut de sqlite. La solution est de renommer la colonne "cur_time" au lieu de "current_time".

0
mozziehh

A propos de la méthode efficace. Vous pouvez utiliser CursorLoader. Par exemple, j'ai inclus mon action. Et vous devez implémenter ContentProvider pour votre base de données. https://developer.Android.com/reference/Android/content/ContentProvider.html

Si vous implémentez cela, vous appellerez votre base de données très efficace.

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