Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.73/22: Рейтинг темы: голосов - 22, средняя оценка - 4.73
1 / 1 / 0
Регистрация: 17.12.2013
Сообщений: 99
1

ListView - как добавлять данные из БД в начало списка?

23.12.2014, 10:05. Показов 4365. Ответов 52
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. Подскажите, пожалуйста, как сделать, чтобы при добавлении данных в БД - в ListView они попадали в начало списка.
Использую SimpleCursorAdapter...
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.12.2014, 10:05
Ответы с готовыми решениями:

Как добавлять записи в начало списка и ограничивать их количество?
есть listview который берет данные из sqlite, и возникли такие вопросы: 1. как сделать чтоб в...

Как в ListView добавлять элементы
всем привет есть ListView , при старте программы одна строчка занята с надписью 1 когда жмёём на...

Как в listview добавлять множество строк?
Как в listview добавлять множество автоматически генерируемых строк? Литералы не помогают...

Список: Как добавлять элемент в список, не в начало и не в конец, а между 1 и 2 элементами списка?
Как добавлять элемент в список, не в начало и не в конец, а между 1 и 2 элементами списка? Вот...

52
210 / 210 / 60
Регистрация: 22.08.2014
Сообщений: 644
23.12.2014, 10:15 2
Ну, как вариант, в запросе на выборку сортируйте в курсор адаптера в обратном порядке, например, по rowid (или ваш походящий ключ) - что-то типа
SQL
1
SELECT * FROM yourtable ORDER BY rowid DESC
0
1 / 1 / 0
Регистрация: 17.12.2013
Сообщений: 99
23.12.2014, 10:23  [ТС] 3
У меня вот такой код добавления данных:

Java
1
2
3
4
5
6
7
8
9
// добавить запись в DB_TABLE
    public void addRec(String dat, String cat, String debt, String kol) {
        ContentValues cv = new ContentValues();
        cv.put(COLUMN_DAT, dat);
        cv.put(COLUMN_CAT, cat);
        cv.put(COLUMN_SUM, debt);
        cv.put(COLUMN_KOL, kol);
        mDB.insert(DB_TABLE, null, cv);
    }
Добавлено через 1 минуту
Это здесь мне надо что-то править?

Добавлено через 2 минуты
Или при получении данных из таблицы?

Java
1
2
3
4
// получить все данные из таблицы DB_TABLE
    public Cursor getAllData() {
        return mDB.query(DB_TABLE, null, null, null, null, null, null);
    }
0
210 / 210 / 60
Регистрация: 22.08.2014
Сообщений: 644
23.12.2014, 10:33 4
Java
1
return mDB.rawquery("SELECT * FROM DB_TABLE ORDER BY rowid DESC", null);
0
1 / 1 / 0
Регистрация: 17.12.2013
Сообщений: 99
23.12.2014, 10:45  [ТС] 5
Ошибку выдает в этой строке при запуске приложения... (((
0
210 / 210 / 60
Регистрация: 22.08.2014
Сообщений: 644
23.12.2014, 10:48 6
Java
1
return mDB.rawquery("SELECT rowid _id, * FROM DB_TABLE ORDER BY _id DESC", null);
0
1 / 1 / 0
Регистрация: 17.12.2013
Сообщений: 99
23.12.2014, 10:53  [ТС] 7
Снова - там же... (((
0
210 / 210 / 60
Регистрация: 22.08.2014
Сообщений: 644
23.12.2014, 10:54 8
Лечу по фотографии
0
1 / 1 / 0
Регистрация: 17.12.2013
Сообщений: 99
23.12.2014, 10:55  [ТС] 9
Переведи ))))
0
210 / 210 / 60
Регистрация: 22.08.2014
Сообщений: 644
23.12.2014, 11:27 10
Лучший ответ Сообщение было отмечено Seivan как решение

Решение

Java
1
return mDB.rawquery("SELECT rowid _id, * FROM "+ DB_TABLE +" ORDER BY _id DESC", null);
1
1 / 1 / 0
Регистрация: 17.12.2013
Сообщений: 99
23.12.2014, 11:28  [ТС] 11
Вот класс БД

Кликните здесь для просмотра всего текста


Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
private static final String DB_NAME = "myincome";
    private static final int DB_VERSION = 1;
 
    private static final String DB_TABLE = "mytab";
  
 
    public static final String COLUMN_ID = "_id";
    public static final String COLUMN_DAT = "dat";
    public static final String COLUMN_CAT = "cat";
    public static final String COLUMN_SUM = "debt";
    public static final String COLUMN_KOL = "kol";
 
    private static final String DB_CREATE =
            "create table " + DB_TABLE + "(" +
                    COLUMN_ID + " integer primary key autoincrement, " +
                    COLUMN_DAT + " text, " +
                    COLUMN_CAT + " text, " +
                    COLUMN_SUM + " text, " +
                    COLUMN_KOL + " text" +
                    ");";
 
  
    private final Context mCtx;
 
 
    private DBHelper mDBHelper;
    private SQLiteDatabase mDB;
 
    public DB(Context ctx) {
        mCtx = ctx;
    }
 
    // открыть подключение
    public void open() {
        mDBHelper = new DBHelper(mCtx, DB_NAME, null, DB_VERSION);
        mDB = mDBHelper.getWritableDatabase();
    }
 
    // закрыть подключение
    public void close() {
        if (mDBHelper != null) mDBHelper.close();
    }
 
    // получить все данные из таблицы DB_TABLE
    public Cursor getAllData() {
     //   return mDB.query(DB_TABLE, null, null, null, null, null, null); // - Было так.... запускалось...
 
    return mDB.rawQuery("SELECT rowid _id, * FROM DB_TABLE ORDER BY _id DESC", null); // А так  - ошибка (в этой строке и в классе, где используется этот метод) при старте приложения
 
    }
 
   
    // добавить запись в DB_TABLE
    public void addRec(String dat, String cat, String debt, String kol) {
        ContentValues cv = new ContentValues();
        cv.put(COLUMN_DAT, dat);
        cv.put(COLUMN_CAT, cat);
        cv.put(COLUMN_SUM, debt);
        cv.put(COLUMN_KOL, kol);
        mDB.insert(DB_TABLE, null, cv);
    }
 
   
    // обновить запись в DB_TABLE
    public void updCod(long id, String dat, String cat, String debt, String kol) {
        ContentValues cv = new ContentValues();
        cv.put(COLUMN_DAT, dat);
        cv.put(COLUMN_CAT, cat);
        cv.put(COLUMN_SUM, debt);
        cv.put(COLUMN_KOL, kol);
        mDB.update(DB_TABLE, cv, COLUMN_ID + " = " + id, null);
    }
 
   
    // установить курсор на запись с введенным ID
    public Cursor select(long id) {
 
    return mDB.query(true, DB_TABLE, new String[] { COLUMN_ID, COLUMN_DAT, COLUMN_CAT, COLUMN_SUM, COLUMN_KOL },
              COLUMN_ID + "=?", new String[] { String.valueOf(id) }, null, null, null, null);
    }
  
 
    // удалить запись из DB_TABLE
    public void delRec(long id) {
        mDB.delete(DB_TABLE, COLUMN_ID + " = " + id, null);
    }
 
  
    // удалить все записи из DB_TABLE
    public void deleteAll() {
        mDB.delete(DB_TABLE, null, null);
    }
 
   
 
    // класс по созданию и управлению БД
    private class DBHelper extends SQLiteOpenHelper {
 
        public DBHelper(Context context, String name, CursorFactory factory,
                        int version) {
            super(context, name, factory, version);
        }
 
        // создаем и заполняем БД
        @Override
        public void onCreate(SQLiteDatabase db) {
            db.execSQL(DB_CREATE);
     
 
            ContentValues cv = new ContentValues();
            for (int i = 1; i < 2; i++) {
                cv.put(COLUMN_DAT, "1.12.2014");
                cv.put(COLUMN_CAT, "Взносы");
                cv.put(COLUMN_SUM, "100");
                cv.put(COLUMN_KOL, "2");
 
                db.insert(DB_TABLE, null, cv);
 
            }
        }
 
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        }
    }
}
0
210 / 210 / 60
Регистрация: 22.08.2014
Сообщений: 644
23.12.2014, 11:34 12
Лучший ответ Сообщение было отмечено Seivan как решение

Решение

А говоришь не понимаешь...

Java
1
return mDB.rawquery("SELECT * FROM "+ DB_TABLE +" ORDER BY "+ COLUMN_ID+" DESC", null);
1
1 / 1 / 0
Регистрация: 17.12.2013
Сообщений: 99
23.12.2014, 11:44  [ТС] 13
Спасибочки... ))) Пашет!!! Плюсик отправил )

Добавлено через 55 секунд
А таким же образом можно сортировать и по дате, да?

Добавлено через 1 минуту
Цитата Сообщение от Armagedo Посмотреть сообщение
Код Java(TM) 2 Platform Standard Edition 5.0
1
return mDB.rawquery("SELECT rowid _id, * FROM "+ DB_TABLE +" ORDER BY _id DESC", null);

Вот это заработало... то поздно сообщение дошло... )

Добавлено через 5 минут
И второй работает ))
0
210 / 210 / 60
Регистрация: 22.08.2014
Сообщений: 644
23.12.2014, 11:55 14
Используй второй вариант
Java
1
return mDB.rawquery("SELECT * FROM "+ DB_TABLE +" ORDER BY "+ COLUMN_ID+" DESC", null);
Я ж не знал, что у тебя есть ключ-счетчик.
В первом варианте используется автоматически вводимое SQLite поле rowid (естественно, если при создании таблицы не было выбрано опцию WITHOUT ROWID).
И так совпало, что в выборке это поле "обзывается" _id, аналогично существующему у тебя полю, которое тоже отбирается в силу "*".
Что там в результатае в курсоре в таком случае - нужно смотреть...

А таким же образом можно сортировать и по дате, да?
Та по чем хочешь, в принципе
Java
1
return mDB.rawquery("SELECT * FROM "+ DB_TABLE +" ORDER BY "+ COLUMN_DAT+" DESC", null);
Лучше читай первоисточник по SQLite и запросам
0
1 / 1 / 0
Регистрация: 17.12.2013
Сообщений: 99
23.12.2014, 12:36  [ТС] 15
Только начал конкретно разбираться в сортировках и выборка... Спасибо еще раз за помощь!! ) теперь легче будет дальше все понять ))

По дате попытался так же сделать, но не сортирует, чего-то... добавляет в конец листа...
поле с датой изменил на COLUMN_DAT + " date, " +
0
912 / 560 / 88
Регистрация: 13.02.2014
Сообщений: 2,081
23.12.2014, 12:46 16
А чем сортировка по id не устраивает? Дата то сегодняшняя.
0
1 / 1 / 0
Регистрация: 17.12.2013
Сообщений: 99
23.12.2014, 12:52  [ТС] 17
В итоге мне нужно сортировать по дате...

Добавлено через 31 секунду
Дата может меняться...
0
210 / 210 / 60
Регистрация: 22.08.2014
Сообщений: 644
23.12.2014, 12:53 18
Seivan,
поле с датой изменил на COLUMN_DAT + " date, " +
это какой-то ненужный костыль, ИМХО, тем более непонятно, как это вообще отрабатывается - ведь у тебя нет поля date...
0
1 / 1 / 0
Регистрация: 17.12.2013
Сообщений: 99
23.12.2014, 12:55  [ТС] 19
Цитата Сообщение от Armagedo Посмотреть сообщение
Seivan,
поле с датой изменил на COLUMN_DAT + " date, " +
это какой-то ненужный костыль, ИМХО...

Это создание базы данных и таблицы с полями


Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
private static final String DB_CREATE =
            "create table " + DB_TABLE + "(" +
                    COLUMN_ID + " integer primary key autoincrement, " +
                    COLUMN_DAT + " date, " +
                    COLUMN_CAT + " text, " +
                    COLUMN_SUM + " text, " +
                    COLUMN_KOL + " text" +
                    ");";
0
210 / 210 / 60
Регистрация: 22.08.2014
Сообщений: 644
23.12.2014, 13:09 20
Это тип "datE", а поле у тебя "dat".
Отсюда и вопрос возник.

Кстати, SQLite не умеет хранить типы date/time в обычном понимании, равно, как и boolean...
Так что, что там и в каком виде хранится у тебя в этом поле, а значит и правила сравнения - зависит...
1.2 Date and Time Datatype

SQLite does not have a storage class set aside for storing dates and/or times. Instead, the built-in Date And Time Functions of SQLite are capable of storing dates and times as TEXT, REAL, or INTEGER values:

TEXT as ISO8601 strings ("YYYY-MM-DD HH:MM:SS.SSS").
REAL as Julian day numbers, the number of days since noon in Greenwich on November 24, 4714 B.C. according to the proleptic Gregorian calendar.
INTEGER as Unix Time, the number of seconds since 1970-01-01 00:00:00 UTC.
Applications can chose to store dates and times in any of these formats and freely convert between formats using the built-in date and time functions.

https://www.sqlite.org/datatype3.html
P.S. А, понял, что где откуда
0
23.12.2014, 13:09
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.12.2014, 13:09
Помогаю со студенческими работами здесь

Встать в начало списка ListView
Как поднять скрол в начало списка в listview при нажатии на кнопку?

Добавление элемента в начало списка ListView
Добрый день! Подскажите, пожалуйста, как добавить элемент в начало списка TreeView? В вариантах...

Как добавлять картинки в listview
Добрый день ! Помогите, пожалуйста, с таким вопрос: у меня есть listview , а я хочу так, чтобы в...

RAD XE3, как добавлять элементы в ListView
Собственно вопрос : как в RAD Studio добавлять программно элементы в лист вью? Желательно,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru