2012-01-14 3 views
1

Я хочу хранить данные истории в sqlite db. должно быть обеспечено максимум 20 "записей".История магазинов в базе данных

При добавлении нового входа старшее должно быть удалено, а новое добавлено в начале списка. при вызове histroy я хочу, чтобы он отображался в обратном порядке (последняя запись первая)

насколько я знаю, что функциональность невозможна с помощью курсора сама по себе. мне нужно будет преобразовать курсор i в другой тип MAP. вопрос в том, какой из них и как реализовать эти действия.

+1

Почему бы просто не обработать все это в функции, добавляющей элементы в ваш db? – Aidanc

+0

конечно. вопрос в том, как может выглядеть эта функция. например, я понятия не имею, как реализовать замену самого старого значения «простым» способом. конечно, я мог бы хранить дату + время как строку в db и преобразовывать ее обратно в каждое событие add/request, а затем использовать сортировку для сортировки по дате. но это произойдет с КАЖДОЙ ОДИНОЧНЫМ действием, которое очень накладно! – masi

ответ

3

Это не должно быть так сложно. Для таблицы для истории необходим столбец идентификатора. Это также является обязательным при работе с курсорами и адаптерами. Определите столбец идентификатора как auto incremented. Поэтому каждый раз, когда вы вставляете новую строку в таблицу, новая строка автоматически получает уникальный идентификатор, который больше, чем последний идентификатор, который был назначен для строки, которая была вставлена ​​раньше.

Вы должны написать метод, который вы вызываете, если хотите добавить новую запись в базу данных. В рамках метода вы делаете следующее.

  1. Проверьте количество элементов в таблице базы данных.
    • Если есть менее 20 записей, ничего не делайте.
    • Если числа больше или равно 20, то запрос для строки с lowest id и удалить его.
  2. Добавить новую запись в базу данных. Он автоматически получит наивысший идентификатор всех строк в таблице.

Если вы хотите отображать записи в списке с помощью курсора, вы можете определить порядок возвращаемых строк командой SQL order by.

+0

вот что я искал! У меня есть все команды sql, но поскольку я редко работаю с sql, я не думал об этом! благодаря! – masi

+0

Будет ли автоматическое задание для идентификатора? Поскольку строка с наименьшим идентификатором будет удалена, будет разрыв. Или эта проблема также обрабатывается методом удаления? – yoshi

+1

Базы данных обычно имеют разные режимы автоматического увеличения. Обычно каждая строка получает идентификатор, который выше любого другого идентификатора, который когда-либо был назначен любой строке int в таблице. Поэтому, когда у вас есть 4 строки в таблице, удалите строку с id 2 и вставьте новую, новая строка получит идентификатор 5 или выше. Существуют и другие режимы, в которых идентификаторы удаленных строк могут быть повторно использованы или где идентификатор не только уникален для отдельной таблицы, но и для всей базы данных. Но я думаю, что [SQLite] (http://www.sqlite.org/autoinc.html) предлагает только первый режим, о котором я упоминал. – Flo

Смежные вопросы