SQLite: хранить пустое значение в столбце типа long? - PullRequest
0 голосов
/ 06 июня 2018

У меня есть приложение со списком CardViews RecyclerView.CardView создается, когда пользователь вводит некоторые данные, а затем эти данные сохраняются в базе данных SQLite.Когда пользователь вводит дату с помощью Datepicker для одного CardView, столбец SQLite «COLUMN_NOTIFTIME» сохраняет системное время (System.currentTimeMillis () + 2 часа), используя длинное «время уведомления» из класса модели.Я использую «время уведомления», чтобы запустить уведомление для пользователя.Если пользователь не вводит дату для CardView, я бы хотел, чтобы «COLUMN_NOTIFTIME» содержал нулевое значение или какой-либо другой индикатор, показывающий, что данных нет.Я понимаю, что длинное не может быть нулевым.Итак, как мне сохранить какой-либо тип значения или индикатор, чтобы показать, что «время уведомления» пусто для случая, когда пользователь не вводит какую-либо дату для этого CardView?Или я должен просто изменить длинное «время уведомления» на строку и отформатировать системное время + 2 часа в строку, чтобы я мог использовать NULL, isEmpty (), isNull () и putNull ()?

Model class:    
public class CardViewItem {      

    private int id; 
    private String duedate;
    private String duetime;
    private long notiftime;
}

DB class:    
public class SQLiteDB extends SQLiteOpenHelper {

    ...
    private static final String SQL_CREATE_ENTRIES =
    "CREATE TABLE IF NOT EXISTS " + TABLE_NAME + "(" +

        COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
        COLUMN_DUEDATE + " TEXT," +
        COLUMN_DUETIME + " TEXT," +
        COLUMN_NOTIFTIME + " INTEGER" + ")";    
}

1 Ответ

0 голосов
/ 06 июня 2018

Вы можете сохранить любое желаемое значение из-за гибкости SQLite (за одним исключением, из псевдонима rowid, которым вы идентифицируете столбец, вы можете хранить любой тип значения в любом типе столбца).

Вы можете сохранить нулевое значение, не указав значение для столбца (если оно не определено с помощью ограничения NOT NULL), для которого потребуется указать столбцы для вставки.

Так что в вашем случаеSQL, используемый для вставки, должен быть равен: -

INSERT INTO your_table (due_date_column_name,due_time_column_name) VALUES('2018-01-01','10:30');

При использовании метода вставки это будет выглядеть следующим образом: -

ContentValues cv = new ContentValues();
cv.put(COLUMN_DUEDATE,"2018-01-01");
cv.put(COLUMN_DUETIME,"10:00");
long inserted_id = db.insert(TABLE_NAME,null,cv);

Вместо: -

ContentValues cv = new ContentValues();
cv.put(COLUMN_DUEDATE,"2018-01-01");
cv.put(COLUMN_DUETIME,"10:00");
cv.putCOLUMN_NOTIFTIME,calculated_notiftime_as_long);
long inserted_id = db.insert(TABLE_NAME,null,cv);

Однако простейшим способом было бы сохранить длинную, которая не была бы логически действительной и, следовательно, легко обнаруживаемой, в то же время даты (так что срок выполнения + время_действия - время уведомления = 0)), 0, вероятно, будет самым простым, -1 также часто используется, чтобы ничего не указывать (обычно, когда 0 может быть допустимым).

...