web-dev-qa-db-ja.com

Androidアプリケーションでdatetimeを 'now'に設定したSQLiteレコードを挿入する方法は?

次のように作成されたテーブルがあるとします。

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')」テキストに設定するだけです。

105
droidguy

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);
    
188
e-satis

私のコードでは、列の型と制約としてDATETIME DEFAULT CURRENT_TIMESTAMPを使用しています。

あなたの場合、テーブル定義は

create table notes (
  _id integer primary key autoincrement, 
  created_date date default CURRENT_DATE
)
40
Gautier Hayoun

方法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()'");

方法 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);
28
Rikin Patel

使用できるオプションがいくつかあります。

  1. 代わりに文字列「(DATETIME( 'now'))」を使用してみてください。
  2. System.currentTimeMillis()を使用して、日付時刻を自分で挿入します
  3. SQLiteテーブルを作成するとき、created_date列のデフォルト値を現在の日時として指定します。
  4. SQLiteDatabase.execSQL を使用して直接挿入します。
7
sooniln

私には、"datetime('now')"を値ではなく文字列として送信しているように見えます。

私の考えは、現在の日付/時刻を取得してデータベースに日付/時刻の値として送信する方法を見つけるか、SQLiteの組み込み(DATETIME('NOW'))パラメーターを使用する方法を見つけることです。

このSO.comの質問 にあるanwsersをチェックしてください-それらは正しい方向にあなたを導くかもしれません。

これがお役に立てば幸いです!

6
Jared Harley

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)に入れる代わりに、日付の列に数字を挿入します。
だから、あなたの日付があります。
たとえば、データベースにこの番号を保存します:1332342462078
しかし、上記のメソッドを呼び出すと、次の結果が得られます:21-mar-2012 16.07.42

4
Marco Gallella

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

2
Cedric Simon

このコード例はあなたが望むことをするかもしれません:

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

1
Kristy Welsh

私にぴったりの作品:

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

日付を長く保存します。

1
Stefan Beike

式「(DATETIME( 'now'))」を使用してデフォルトのタイムスタンプを挿入しようとしているときに、フィールドが「not null」としてマークされていないことを確認してください

0