110

说,我们有一个表创建为:

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 列设置为now?为了清楚起见,

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

不是正确的解决方案。它只是将列设置为“datetime('now')”文本。

4

10 回答 10

199

您不能使用 Java 包装器“ContentValues”来使用 datetime 函数。您可以使用:

  • 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);
    
于 2009-05-04T10:31:13.643 回答
45

在我的代码中,我DATETIME DEFAULT CURRENT_TIMESTAMP用作列的类型和约束。

在您的情况下,您的表定义将是

create table notes (
  _id integer primary key autoincrement, 
  created_date date default CURRENT_DATE
)
于 2010-03-21T13:36:28.637 回答
35

方法一

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
);

方法二

db.execSQL("INSERT 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);
于 2014-11-09T09:42:23.513 回答
8

您可以使用几个选项:

  1. 您可以尝试使用字符串 "(DATETIME('now'))" 代替。
  2. 自己插入日期时间,即使用 System.currentTimeMillis()
  3. 创建 SQLite 表时,将 created_date 列的默认值指定为当前日期时间。
  4. 使用SQLiteDatabase.execSQL直接插入。
于 2009-04-16T13:49:14.323 回答
7

对我来说,这个问题看起来像你"datetime('now')"作为一个字符串而不是一个值发送。

我的想法是找到一种方法来获取当前日期/时间并将其作为日期/时间值发送到您的数据库,或者找到一种使用 SQLite 内置(DATETIME('NOW'))参数的方法

这个 SO.com 问题上查看答案- 他们可能会引导您走向正确的方向。

希望这会有所帮助!

于 2009-04-16T07:33:35.827 回答
5

您可以使用java的功能,即:

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

这样,在您的数据库中,您可以保存一个数字。
这个数字可以这样解释:

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

你应该将数字插入到日期列中,而不是 l 到 new Date(l) 中。
所以,你有你的约会。
例如,我在我的数据库中保存了这个数字:1332342462078
但是当我调用上面的方法时,我得到了这个结果:21-mar-2012 16.07.42

于 2012-03-21T15:10:55.623 回答
3

根据@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());

于 2014-02-27T01:18:13.360 回答
1

此代码示例可能会执行您想要的操作:

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

于 2013-03-11T22:38:33.850 回答
1

对我来说完美:

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

将您的日期保存为长。

于 2012-08-05T06:18:03.963 回答
0

确保在尝试使用表达式“(DATETIME('now'))”插入默认时间戳的同时,该字段未标记为“非空”

于 2017-10-03T13:09:00.420 回答