2012-04-13 3 views
4

получить данные из моей БД с помощьюСортировка DB данных и отображение в виде списка

cursor = db.query("WebLeadMaster", select, "condition1="+conditionVal1+ 
" and condition2="+ConditionVal2,null, null, null, "RegistrationTime DESC"); 

Я получаю данные в моем курсора в порядке. Чтобы отобразить данные, я использую следующий код:

Так что я не могу изменить содержимое курсора. Запрос сортировки имеет условие «RegistrationTime», которое является Строковый тип данных. Как вы можете видеть на изображении ниже, он не находится в надлежащем отсортированном формате. (не в соответствии с датой).

Какие изменения я должен внести в свой код, чтобы он сортировался должным образом в соответствии с датой и временем?

expected output and actual output

Если я изменить мой DB запрос, чтобы выглядеть как

cursor = db.query("WebLeadMaster", select, "condition1="+conditionVal1+ 
" and condition2="+ConditionVal2,null, null, null, null); 

это дает возрастающий порядок. Все, что я хочу, это нисходящий порядок.

+0

только обратный он станет нисходящим – Sameer

+1

Ваше время дается в порядке _descending_, что означает, что самые высокие значения находятся в верхней части. Вы хотите выполнить заказ _ascending_ по умолчанию, см. Мой ответ для примеров кода. – Sam

+0

@ Сэм хе-хе, я не заметил, что в первый раз я прочитал этот вопрос, но вы правы, RegistrationTime сортируется в порядке убывания ... и он пытается сортировать данные в desc. порядок по id ?? (второе поле в строках) – Selvin

ответ

2

Ну, я изменил структуру таблицы. Я добавил еще одно поле «_id». Установите свойство как AUTO INCREMENT ему, и отсортировал список по отношению к _id поле.

1

Если вы используете ORM, вы можете сортировать данные по метке времени. ORM облегчает ввод данных и извлечение данных из базы данных. Вы должны включить файлы jar в свой проект, чтобы использовать ORM ...

+0

дата-время типа данных «String» сэр. – Pallavi

2

Самое простое предложение - сохранить дату в другом формате (но все еще сохранен как строку) в базе данных. Если вы сохраните данные в формате даты по умолчанию SQLite (YYYY-MM-DD HH: NN: SS), вы можете легко отсортировать даты.

Чтобы отобразить дату в вашем формате, вам просто нужно переформатировать дату в правильный формат.

+0

android дал ошибку для этого формата. Поэтому я изменил его на (yyyy-MM-dd hh: mm: ss). Но все же я получаю ту же проблему ... Кроме того, RegistrationDate имеет тип данных «String», поэтому не знаю, изменит ли формат в формате или нет. – Pallavi

+0

dennisg означает, что вы должны изменить данные в db в этот формат (stil string/varchar, но сохраняемый в «yyyy-MM-dd hh: mm: ss»/поскольку SQLIte не имеет формата даты и времени) ... тогда вы можете отсортировать этот столбец как строка и будет хорошо ... – Selvin

+0

Я использовал этот Selvin ... но если у меня есть значение времени: (2012-04-15 10:30:20), (2012-04-15 11:10:20) PM), (2012-04-15 12:30:20 PM) и (2012-04-15 2:30:20 PM), Он показывает, что DESC будет: (2012-04-15 12:30:20 PM), (2012-04-15 11:10:20 PM), (2012-04-15 10:30:20 AM), (2012-04-15 2:30:20 PM), что неверно! – Pallavi

0

поскольку SQLite не имеет типа даты и времени, хранить тип даты как LONG/INT/NUMERIC в SQLite (время EPOCH) будет легче сортировать

затем добавить ViewBinder к Adapter

 /*field in activity/fragment*/ 
     final static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //or other format that you wana to show in ListView 
     ... 
     mAdapter.setViewBinder(new SimpleCursorAdapter.ViewBinder() { 

      @Override 
      public boolean setViewValue(View view, Cursor cursor, 
        int columnIndex) { 
       final int id = view.getId(); 
       switch (id) { 
        case R.id.id_of_textview_with_date_data: 
         final Calendar cal = Calendar.getInstance(); 
         cal.setTimeInMillis(cursor.getLong(columnIndex)); 
         ((TextView) view).setText(sdf.format(cal.getTime())); 
         return true; 
       } 
       return false; 
      } 
     }); 

.. или как dennisg указал хранить как STRING/VARCHAR Редактировать: в формате «yyyy-MM-dd HH: mm: ss»

+0

SQLite имеет типы данных DATETIME, DATE и TIMESTAMP. SQLite преобразует их в INTEGER, REAL или TEXT для вас со встроенными встроенными функциями даты и времени (http://www.sqlite.org/lang_datefunc.html). – Sam

+0

@Sam lol, lol и lol снова из документации ... 'SQLite не имеет класса хранения, зарезервированного для хранения дат и/или времени.' ... в любом случае покажите мне рабочий код для обновления/вставки типа datetype с помощью 'db. update (cv) 'со смешанными длинными или строковыми значениями ... – Selvin

+0

Вы правы, что это не база _storage class_, но этот оператор не является ошибкой' CREATE TABLE foo (time TIMESTAMP); 'поскольку тип данных TIMESTAMP существует , – Sam

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