Как вставить запись SQLite с установленным значением "сейчас" в приложении Android?
Скажем, у нас есть таблица, созданная как:
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')");
Неправильное решение. Он просто устанавливает столбец в "datetime ('now')" текст.
Ответы
Ответ 1
Вы не можете использовать функцию datetime с помощью оболочки Java ContentValues. Либо вы можете использовать:
-
SQLiteDatabase.execSQL, чтобы вы могли ввести необработанный SQL-запрос.
mDb.execSQL("INSERT INTO "+DATABASE_TABLE+" VALUES (null, datetime()) ");
-
Или возможности времени java:
// 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);
Ответ 2
В моем коде я использую DATETIME DEFAULT CURRENT_TIMESTAMP
как тип и ограничение столбца.
В вашем случае определение вашей таблицы будет
create table notes (
_id integer primary key autoincrement,
created_date date default CURRENT_DATE
)
Ответ 3
Метод 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 INTO users(username, created_at)
VALUES('ravitamada', 'datetime()'");
Метод 3
Использование функций java Date
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);
Ответ 4
Есть несколько вариантов, которые вы можете использовать:
- Вы можете попробовать использовать строку "(DATETIME ('now')) вместо этого.
- Вставьте дату-время самостоятельно, то есть с помощью System.currentTimeMillis()
- При создании таблицы SQLite укажите значение по умолчанию для столбца created_date как текущее время.
- Используйте SQLiteDatabase.execSQL для вставки напрямую.
Ответ 5
Для меня проблема заключается в том, что вы отправляете "datetime('now')"
как строку, а не значение.
Моя мысль заключается в том, чтобы найти способ захватить текущую дату/время и отправить его в вашу базу данных в качестве значения даты/времени или найти способ использования встроенного в SQLite параметра (DATETIME('NOW'))
Проверьте андерсеров на этом вопросе SO.com - они могут привести вас в правильном направлении.
Надеюсь, это поможет!
Ответ 6
Вы можете использовать функцию java, которая:
ContentValues cv = new ContentValues();
cv.put(Constants.DATE, java.lang.System.currentTimeMillis());
Таким образом, в вашем db вы сохраните номер.
Это число можно интерпретировать следующим образом:
DateFormat dateF = DateFormat.getDateTimeInstance();
String data = dateF.format(new Date(l));
Вместо l в новую Date (l), вы вставляете номер в столбец даты.
Итак, у вас есть дата.
Например, я сохраняю в своем db этот номер: 1332342462078
Но когда я вызываю метод выше, я получаю этот результат: 21-март-2012 16.07.42
Ответ 7
Основываясь на ответе @e-satis, я создал частный метод в моем классе "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());
Ответ 8
Работает для меня идеально:
values.put(DBHelper.COLUMN_RECEIVEDATE, geo.getReceiveDate().getTime());
Сохраните дату как длинную.
Ответ 9
Этот пример кода может делать то, что вы хотите:
http://androidcookbook.com/Recipe.seam?recipeId=413
Ответ 10
Убедитесь, что поле не помечено как "не равно нулю" одновременно с тем, как вы пытаетесь вставить отметку времени по умолчанию, используя выражение "(DATETIME ('now'))"