База данных SQL неправильно сортируется в ListView - PullRequest
0 голосов
/ 09 ноября 2018

У меня есть база данных SQL с несколькими столбцами, которую я использую с simpleCursorAdapter, чтобы показать ее внутри списка. Я хочу отсортировать базу данных по целочисленному столбцу COL3. Я знаю, как это сделать, однако мои попытки не сортировали данные. Я не совсем уверен, правильно ли я его разместил, но буду очень признателен за помощь.

DatabaseHelper.java

    @Override
    public void onCreate(SQLiteDatabase db) {
        String createTable = "CREATE TABLE " + TABLE_NAME + " (_id INTEGER PRIMARY KEY AUTOINCREMENT, " +
                COL2 +" TEXT, " + COL3 + " INTEGER, '" + COL4 + "' TEXT, '" + COL5 + "'INTEGER, '" + COL6 + "'INTEGER, '" + COL7 + "'INTEGER, '" + COL8 + "'INTEGER)";
        db.execSQL(createTable);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int i, int i1) {
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
        onCreate(db);
    }

    public boolean addData(String item, String desc, int pri, int strat, int person, int urgen) {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        contentValues.put(COL2, item);
        contentValues.put(COL4, desc);
        contentValues.put(COL3, pri);
        contentValues.put(COL6, strat);
        contentValues.put(COL7, person);
        contentValues.put(COL8, urgen);

        String query = "SELECT * FROM " + TABLE_NAME + " ORDER BY " + COL3 + " DESC";
        db.rawQuery(query, null);

        Log.d(TAG, "addData: Adding " + item + " to " + TABLE_NAME);
        long result = db.insert(TABLE_NAME, null, contentValues);

        //if data as inserted incorrectly it will return -1
        if (result == -1) {
            return false;
        } else {
            return true;
        }
    } 
public Cursor getData(){
        SQLiteDatabase db = this.getWritableDatabase();
        String query = "SELECT * FROM " + TABLE_NAME;
        Cursor data = db.rawQuery(query, null);
        return data;
    }
    public Cursor getItemID(String name){
        SQLiteDatabase db = this.getWritableDatabase();
        String query = "SELECT " + COL1 + " FROM " + TABLE_NAME +
                " WHERE " + COL2 + " = '" + name + "'";
        Cursor data = db.rawQuery(query, null);
        return data;
    } 
    public String[] databaseToStringArray() {
        String[] fromColumns = new String[]{COL2, COL4};
        SQLiteDatabase db = getWritableDatabase();
        Cursor cursor = db.rawQuery(" SELECT * FROM " + TABLE_NAME + " WHERE 1 ", null);

        if (cursor != null && cursor.getCount()>0) {
            Log.d("Event", "Records do exist");
        }
        else {
            Log.d("Event", "Records do not exist");
        }


        cursor.moveToFirst();
        while (!cursor.isAfterLast()) {
            cursor.moveToNext();
        }
        db.close();
        return fromColumns;
    }
}

Если вы хотите, чтобы я уточнил или предоставил дополнительную информацию, я был бы рад. Заранее спасибо

1 Ответ

0 голосов
/ 09 ноября 2018

Ваш код: -

    String query = "SELECT * FROM " + TABLE_NAME + " ORDER BY " + COL3 + " DESC";
    db.rawQuery(query, null);

Извлечет данные в курсор, отсортированный, как вы указали. Тем не менее, курсор не используется. Это не повлияет на саму Таблицу, где хранятся данные, где есть доступное пространство.

Необходимо включить сортировку (ORDER BY COL3) в запросе, который возвращает курсор (для этого метода отображается метод getData ), который используется в качестве источника ListView.

Если приведенное выше предположение верно, то метод getData может быть: -

public Cursor getData(){
    SQLiteDatabase db = this.getWritableDatabase();
    String query = "SELECT * FROM " + TABLE_NAME + " ORDER BY " + COL3 + " DESC";
    return db.rawQuery(query, null);
}
  • Обратите внимание на более простой прямой возврат курсора

Приведенные выше строки бесполезны в методе addData и должны быть удалены. Таким образом, метод addData может быть: -

public boolean addData(String item, String desc, int pri, int strat, int person, int urgen) {
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues contentValues = new ContentValues();
    contentValues.put(COL2, item);
    contentValues.put(COL4, desc);
    contentValues.put(COL3, pri);
    contentValues.put(COL6, strat);
    contentValues.put(COL7, person);
    contentValues.put(COL8, urgen);

    Log.d(TAG, "addData: Adding " + item + " to " + TABLE_NAME);
    return (db.insert(TABLE_NAME, null, contentValues) > 0);
}
  • Обратите внимание на более простой / альтернативный код для определения true или false для возврата.
...