23

私は持っている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)".
4

3 に答える 3

50

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

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String date = sdf.format(new 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 をご覧ください。

于 2013-05-24T16:56:24.490 に答える
13

日付を 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. ISO8601 文字列としてのTEXT ("YYYY-MM-DD HH:MM:SS.SSS")。
  2. ユリウス日としてのREAL。先発グレゴリオ暦による紀元前 4714 年 11 月 24 日のグリニッジ正午からの日数。
  3. UNIX 時間としてのINTEGER 、1970-01-01 00:00:00 UTC からの秒数。アプリケーションは、これらの形式のいずれかで日付と時刻を保存することを選択し、組み込みの日付と時刻関数を使用して形式を自由に変換できます。

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

于 2013-05-24T19:05:52.273 に答える
2

日付をデータベースに入れる最良の方法は、その long 値を使用することです。私はあなたがしていたことをやろうとしましたが、同様のエラーがありました。文字列の代わりに、数値を入れます。これは、ある種のミリ秒値であると私は信じています。引き抜くと元に戻すことができます。

于 2013-05-24T16:45:46.310 に答える