Как вставить SQLite запись с DateTime, установленным в «теперь» в Android приложения?

голоса
102

Скажем, у нас есть таблица, созданные как:

create table notes (_id integer primary key autoincrement, created_date date)

Для того, чтобы вставить запись, я хотел бы использовать

ContentValues initialValues = new ContentValues(); 
initialValues.put(date_created, );
long rowId = mDb.insert(DATABASE_TABLE, null, initialValues);

Но как установить DATE_CREATED столбец в настоящее время ? Для того, чтобы понять, то

initialValues.put(date_created, datetime('now'));

Разве не является правильным решением. Он просто устанавливает столбец «Дата и время („сейчас“)» текст.

Задан 16/04/2009 в 04:43
источник пользователем
На других языках...                            


10 ответов

голоса
186

Вы не можете использовать функции даты и времени с помощью Java-оболочки «ContentValues». Либо вы можете использовать:

  • SQLiteDatabase.execSQL так что вы можете ввести необработанный запрос SQL.

    mDb.execSQL("INSERT IGNORE  INTO "+DATABASE_TABLE+" VALUES (null, datetime()) ");
    
  • Или возможности Дата ява время:

    // set the format to sql date time
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
    Date date = new Date();
    ContentValues initialValues = new ContentValues(); 
    initialValues.put("date_created", dateFormat.format(date));
    long rowId = mDb.insert(DATABASE_TABLE, null, initialValues);
    
Ответил 04/05/2009 d 11:31
источник пользователем

голоса
37

В моем коде я использую DATETIME DEFAULT CURRENT_TIMESTAMPкак тип и ограничение столбца.

В вашем случае ваше определение таблицы будет

create table notes (
  _id integer primary key autoincrement, 
  created_date date default CURRENT_DATE
)
Ответил 21/03/2010 d 14:36
источник пользователем

голоса
24

Метод 1

CURRENT_TIME – Inserts only time
CURRENT_DATE – Inserts only date
CURRENT_TIMESTAMP – Inserts both time and date

CREATE TABLE users(
    id INTEGER PRIMARY KEY,
    username TEXT,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

Способ 2

db.execSQL("INSERT IGNORE  INTO users(username, created_at) 
            VALUES('ravitamada', 'datetime()'");

Метод 3 Использование Java Дата функции

private String getDateTime() {
        SimpleDateFormat dateFormat = new SimpleDateFormat(
                "yyyy-MM-dd HH:mm:ss", Locale.getDefault());
        Date date = new Date();
        return dateFormat.format(date);
}

ContentValues values = new ContentValues();
values.put('username', 'ravitamada');
values.put('created_at', getDateTime());
// insert the row
long id = db.insert('users', null, values);
Ответил 09/11/2014 d 09:42
источник пользователем

голоса
7

Есть несколько вариантов, вы можете использовать:

  1. Вы можете попробовать использовать строку «(DATETIME („теперь“))» вместо этого.
  2. Вставьте DateTime самостоятельно, то есть с System.currentTimeMillis ()
  3. При создании таблицы SQLite, указать значение по умолчанию для столбца CREATED_DATE в качестве текущего времени даты.
  4. Используйте SQLiteDatabase.execSQL непосредственно вставили.
Ответил 16/04/2009 d 14:49
источник пользователем

голоса
6

Для меня эта проблема выглядит как вы отправляете "datetime('now')"в виде строки, а не значение.

Моя мысль найти способ , чтобы захватить текущую дату / время , и отправить его в базу данных в качестве значения даты / времени, или найти способ использовать SQLite встроенного в (DATETIME('NOW'))параметре

Проверьте anwsers на этом SO.com вопрос - они могут привести вас в правильном направлении.

Надеюсь, что это помогает!

Ответил 16/04/2009 d 08:33
источник пользователем

голоса
4

Вы можете использовать функцию Java, которая:

ContentValues cv = new ContentValues();
cv.put(Constants.DATE, java.lang.System.currentTimeMillis());  

Таким образом, в вашем дб сохранение номера.
Это число может быть интерпретировано следующим образом:

    DateFormat dateF = DateFormat.getDateTimeInstance();
    String data = dateF.format(new Date(l));

Вместо л в новую дату (л), вы Шоул вставить номер в столбец даты.
Итак, у вас есть дата.
Например я сохранить в моей дб этот номер: 1332342462078
Но когда я называю метод выше я иметь этот результат: 21-мар-2012 16.07.42

Ответил 21/03/2012 d 16:10
источник пользователем

голоса
2

На основе @ е-Сатис ответа я создал частный метод на мой «DBTools» класс так что добавление текущей даты теперь очень просто:

...
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
...
        private String getNow(){
            // set the format to sql date time
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Date date = new Date();
            return dateFormat.format(date);
        }
...

Используйте его сейчас, как это: values.put("lastUpdate", getNow());

Ответил 27/02/2014 d 02:18
источник пользователем

голоса
1

Этот пример кода может делать то, что вы хотите:

http://androidcookbook.com/Recipe.seam?recipeId=413

Ответил 11/03/2013 d 23:38
источник пользователем

голоса
1

Работа для меня идеальный:

    values.put(DBHelper.COLUMN_RECEIVEDATE, geo.getReceiveDate().getTime());

Сохранить дату как долго.

Ответил 05/08/2012 d 07:18
источник пользователем

голоса
0

Убедитесь, что поле не помечено как «не нуль» в то же время, как вы пытаетесь вставить временную метку по умолчанию с помощью выражения «(DATETIME („сейчас“))»

Ответил 03/10/2017 d 13:09
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more