Для Android как мне получить данные из диапазона дат и дат в SQLite, где переменные Android могут быть переданы в запрос? - PullRequest
0 голосов
/ 11 мая 2018

Для Android как получить данные из определенного диапазона дат и дат в SQLite, где переменные Android могут быть переданы в запрос? Например, если пользователь хочет найти данные в поле выбора пользователя, между двумя датами выбора пользователя. Столбец даты уже заполнен в следующем формате:

SimpleDateFormat dateFormat = new SimpleDateFormat ("гггг-мм-дд ЧЧ: мм: сс");

1 Ответ

0 голосов
/ 11 мая 2018

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

public Cursor getDatesInRange(String fromDate, String toDate) {
    String whereclause = COL_DATE + " >= datetime(?) and " + COL_DATE + " <= datetime(?)";
    String[] whereargs = new String[]{fromDate,toDate};
    return this.getWritableDatabase().query(
            TB_DATE,
            null,
            whereclause,
            whereargs,
            null,
            null,
            COL_DATE + " DESC"
    );
}
  • COL_DATE , содержащий имя соответствующего столбца.
  • TB_DATE с именем соответствующей таблицы.
  • fromDate и toDate должны быть в формате гггг-ММ-дд ЧЧ:мм: сс или подформат, отмечающий, что ЧЧ: мм: сс, если не указан, равняется 00: 00: 00 .
    • например, yyyy-MM-dd в некоторых ситуациях будет достаточно.
  • Предположение было сделано в отношении ЗАКАЗА с использованием COL_DATE + " DESC"
  • Для определенной даты вы просто используете ту же дату, НО с использованием часов / минут / секунд, начиная с гггг-ММ-дд 00: 00: 00 и до гггг-ММ-дд- 23: 59: 59 .

Пример

Databasehelper: -

открытый класс SO50282282DBHelper extends SQLiteOpenHelper {

public static final String DBNAME = "SO50282282";
public static final int DBVERSION = 1;
public static final String TB_DATE = "tbl_date";
public static final String COL_DATE = "date_column";

public SO50282282DBHelper(Context context) {
    super(context, DBNAME, null, DBVERSION);
    this.getWritableDatabase();
}

@Override
public void onCreate(SQLiteDatabase db) {
    String crtsql = "CREATE TABLE IF NOT EXISTS " +
            TB_DATE +
            "(" +
            COL_DATE + " TEXT " +
            ")";
    db.execSQL(crtsql);

}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

}

public long addDate(String date) {
    ContentValues cv = new ContentValues();
    cv.put(COL_DATE,date);
    return this.getWritableDatabase().insert(TB_DATE,null,cv);
}

public Cursor getDatesInRange(String fromdate, String toDate) {
    String[] columns = new String[]{"*,rowid AS id"};
    String whereclause = COL_DATE + " >= datetime(?) and " + COL_DATE + " <= datetime(?)";
    String[] whereargs = new String[]{fromdate,toDate};
    return this.getWritableDatabase().query(
            TB_DATE,
            columns,
            whereclause,
            whereargs,
            null,
            null,
            COL_DATE + " DESC"
    );
}

}

  • Примечание rowid извлечено исключительно для демонстрации

В упражнении: -

    SO50282282DBHelper dbhlpr = new SO50282282DBHelper(this);
    // Only insert some testing rows if there are none
    if (
            DatabaseUtils.queryNumEntries(
            dbhlpr.getWritableDatabase(),
            SO50282282DBHelper.TB_DATE
            ) < 1) {
        dbhlpr.addDate("2018-01-01 08:30:56");
        dbhlpr.addDate("2018-02-01 09:31:56");
        dbhlpr.addDate("2018-03-01 10:32:56");
        dbhlpr.addDate("2018-04-01 11:35:56");
        dbhlpr.addDate("2018-05-01 12:36:56");
        dbhlpr.addDate("2018-02-02 12:37:56");
        dbhlpr.addDate("2018-03-02 14:38:56");
    }
    // gets rows id=3 id=4 id=7
    //      (id 1, 2 and 6 before 2018-03-01)(id 5 after 2018-04-30)
    Cursor csr = dbhlpr.getDatesInRange("2018-03-01","2018-04-30");
    SO50282282LogDates(csr);
    // gets rows id = 1
    csr = dbhlpr.getDatesInRange("2018-01-01 00:00:00","2018-01-01 23:59:59");
    SO50282282LogDates(csr);
    //gets rows id = 2, 3, 4, 6 and 7
    csr = dbhlpr.getDatesInRange("2018-01-01 08:30:57","2018-05-01 12:36:55");
    SO50282282LogDates(csr);
    csr.close();

Результаты в журнале: -

Для первого из трех (используя dbhlpr.getDatesInRange("2018-03-01","2018-04-30")): -

05-11 03:56:44.777 2203-2203/? D/EXTRACTED_DATE: Date is 2018-04-01 11:35:56 from row #  4
    Date is 2018-03-02 14:38:56 from row #  7
    Date is 2018-03-01 10:32:56 from row #  3

Для второго (используя getDatesInRange("2018-01-01 00:00:00","2018-01-01 23:59:59")): -

    Date is 2018-01-01 08:30:56 from row #  1

И наконец (используя getDatesInRange("2018-01-01 08:30:57","2018-05-01 12:36:55")): -

05-11 03:56:44.781 2203-2203/? D/EXTRACTED_DATE: Date is 2018-04-01 11:35:56 from row #  4
    Date is 2018-03-02 14:38:56 from row #  7
    Date is 2018-03-01 10:32:56 from row #  3
    Date is 2018-02-02 12:37:56 from row #  6
    Date is 2018-02-01 09:31:56 from row #  2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...