Вставка и упорядочение по времени SQLite для Android

#android #sqlite

#Android #sqlite

Вопрос:

Я пишу приложение для Android, которое позволяет пользователю добавлять новый модуль в базу данных и добавлять день, время начала, время окончания и место для этого модуля.

Пользователь может просматривать все занятия за определенный день.

Проблема, с которой я сталкиваюсь, заключается в том, что прямо сейчас я принимаю время начала и время окончания в виде текста, потому что я не мог выяснить, как принять это за время.

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

2) Текст в EditText затем берется и сохраняется в базе данных.

У меня все работает нормально, единственная проблема, с которой я сталкиваюсь, заключается в том, что когда пользователь просматривает все классы за определенный день, я хочу, чтобы они были упорядочены по времени начала, то есть по первому классу, второму и так далее. Но прямо сейчас он показывает его только в том порядке, в котором он был вставлен в базу данных. Я попробовал УПОРЯДОЧИТЬ ПО, и это просто не сработало.

Я предполагаю, что мне пришлось бы изменить тип данных времени начала и времени окончания.

db.execSQL("CREATE TABLE AllModulesInfo (_id INTEGER PRIMARY KEY AUTOINCREMENT, moduleName TEXT, day Text, startTime Text, finishTime Text, room Text);");

     public void insertIntoAllMod(String moduleName, String day, String startTime, String finishTime, String room)
    {
        ContentValues daysInfo = new ContentValues();
        daysInfo.put("moduleName", moduleName);
        daysInfo.put(Day, day);
        daysInfo.put(StartTime, startTime);
        daysInfo.put(FinishTime, finishTime);
        daysInfo.put(Room, room);           
        db.insert("AllModulesInfo", null, daysInfo);
    }
  

Заранее спасибо, если есть что-то, что я не объяснил должным образом, или какая-либо информация, которую я упустил, которая поможет вам помочь мне решить эту проблему, ПОЖАЛУЙСТА, дайте мне знать. Спасибо

Ответ №1:

Похоже, вы используете строки для своих временных меток. Вам нужно использовать целое число, чтобы фактически сохранить временную метку unix. Тогда ваши запросы с использованием ORDER BY будут отсортированы правильно, например:

 SELECT * FROM table WHERE .... ORDER BY updateTime
  

Я бы предложил преобразовать строку в целое число, используя прямую Java, поскольку это позволяет вам использовать те параметризованные вставки, которые вы показали в своем примере. Однако вы могли бы вручную писать запросы и использовать функции времени, предоставляемые SQLite:

http://www.sqlite.org/lang_datefunc.html


Редактировать:

Похоже, вы можете использовать временную метку строки с SQLite, но поддерживаются только несколько форматов (на этой странице приведены примеры). Я не уверен, что это работает в Android, хотя я всегда использовал целочисленные типы полей для times (которые на самом деле могут хранить длины Java).

— Dan