web-dev-qa-db-ja.com

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)".
_
22
Kostya Khuta

これで、データベースに日付を挿入するときに、このコードを使用できます。

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

46
Homam

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値として保存できます。

  1. [〜#〜] text [〜#〜]ISO8601文字列として( "YYYY-MM-DD HH:MM:SS.SSS")。
  2. [〜#〜] real [〜#〜]ユリウス日数、紀元前4714年11月24日のグリニッジ正午からの日数予後グレゴリオ暦によると。
  3. [〜#〜] integer [〜#〜]Unix時間、1970-01-01 00:00:00 UTCからの秒数。アプリケーションは、これらの形式のいずれかで日付と時刻を保存し、組み込みの日付と時刻の関数を使用して形式間で自由に変換することを選択できます。

http://www.sqlite.org/datatype3.html を参照してください

10
Ilya Lysenko

日付をデータベースに入れる最良の方法は、その長い値を使用することです。私はあなたがやっていることをやろうとしましたが、同様のエラーがありました。文字列の代わりに、数値を入力します。長い値をとることができますが、これはある種のミリ秒値だと思います。その後、引き出したときに再変換できます。

2
Martin Estes