Подтвердить что ты не робот

Как добавить дату в базу данных sqlite

У меня sqlite database

    private static final String DB_PROCESS_CREATE = "create table "
        + DB_TABLE_PROCESS + "(" + PROCESS_ID
        + " integer primary key autoincrement, "
        + PROCESS_DATE + " date);";

Я создаю его db.execSQL(DB_PROCESS_CREATE);

Как добавить значение даты в эту базу данных? Я пробовал:

String date = new SimpleDateFormat("yyyy.MM.dd").format(Calendar
.getInstance().getTime());
ContentValues cv = new ContentValues();
cv.put(db.PROCESS_DATE,Date.valueOf(date));
db.mDB.insert(db.DB_TABLE_PROCESS, null, cv));

Но тогда я получаю error:

"The method put(String, String) in the type ContentValues is not applicable for the arguments (String, Date)".
4b9b3361

Ответ 1

Теперь, когда вы хотите вставить дату в базу данных, вы можете использовать этот код.

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String date = sdf.format(new Date());

В базу данных вставить строку 'date'

Формат даты в sqlite должен иметь следующий формат:

YYYY-MM-DD
YYYY-MM-DD HH:MM
YYYY-MM-DD HH:MM:SS
YYYY-MM-DD HH:MM:SS.SSS
YYYY-MM-DDTHH:MM
YYYY-MM-DDTHH:MM:SS
YYYY-MM-DDTHH:MM:SS.SSS
HH:MM
HH:MM:SS
HH:MM:SS.SSS
now
DDDDDDDDDD 

Подробнее см. http://www.sqlite.org/lang_datefunc.html

Ответ 2

Вы не можете хранить дату в SQLite напрямую. Например, вы можете сохранить его как целое значение:

ContentValues cv = new ContentValues();
cv.put(db.PROCESS_DATE, new Date().getTime());
db.mDB.insert(db.DB_TABLE_PROCESS, null, cv));

В этом случае ваше поле даты должно быть объявлено как целое:

private static final String DB_PROCESS_CREATE = "create table "
        + DB_TABLE_PROCESS + "(" + PROCESS_ID
        + " integer primary key autoincrement, "
        + PROCESS_DATE + " integer);";

В документах SQLite: SQLite не имеет класса хранения, отложенного для хранения дат и/или времени. Вместо этого встроенные функции даты и времени SQLite способны хранить даты и время как значения TEXT, REAL или INTEGER:

  • ТЕКСТ как строки ISO8601 ( "ГГГГ-ММ-ДД ЧЧ: ММ: СС.ССС" ).
  • REAL как Джулиан число дней, число дней с полудня в Гринвиче в ноябре 24, 4714. B.C. согласно пролептическому григорианскому календарю.
  • INTEGER как Unix Time, количество секунд с 1970-01-01 00:00:00 UTC. Приложения могут выбирать даты и время в любом из этих форматы и свободно конвертировать между форматами с использованием встроенной даты и функции времени.

См. http://www.sqlite.org/datatype3.html

Ответ 3

Лучший способ поместить дату в базу данных будет использовать ее длинную ценность. Я пытался сделать то, что вы делали, и у него была аналогичная ошибка. Вместо строки введите числовое значение. Это может занять долгое значение, которое, как мне кажется, является миллисекундным значением. Затем его можно переконфигурировать, когда вы его вытащите.