0

ユーザーが日々の活動に費やしている時間を計算するタスク スケジューラ/タイム マネージャー アプリを開発しています。ユーザーのアクティビティの開始時刻と終了時刻をデータベースから保存および取得する必要があります。しかし、データベース スキーマには非常に多くの列があるため、実装が困難です。これに対処する良い方法がわかりません。それを行うためのより良い方法を提案してください。

ここにコードがあります

package com.example.timejanitor;

import android.content.Context;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;

public class Fixed_Task_Database extends SQLiteOpenHelper {

    private static final int DATABASE_VERSION = 1;
    private static final String DATABASE_NAME = "FixedTask.db";

    public Fixed_Task_Database(Context context, String name,
            CursorFactory factory, int version) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);

    }

    @Override
    public void onCreate(SQLiteDatabase db) {

        try {
            db.execSQL("CREATE TABLE fixedtask(_id INTEGER PRIMARY KEY AUTOINCREMENT,taskName TEXT, sHour INTEGER, sMinute INTEGER,fHour INTEGER, fMinute INTEGER,taskDay INTEGER,taskMonth INTEGER, taskYear INTEGER )");
        } catch (SQLException e) {
            e.printStackTrace();
        }

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

        db.execSQL("DROP TABLE IF EXISTS fixedtask");
        onCreate(db);
    }

}
4

1 に答える 1

2

SQLite のドキュメントには次のように記載されています。

SQLite には、日付や時刻を格納するためのストレージ クラスが用意されていません。代わりに、SQLite の組み込みの日付と時刻関数は、日付と時刻を TEXT、REAL、または INTEGER 値として格納できます。

ISO8601 文字列としての TEXT ("YYYY-MM-DD HH:MM:SS.SSS")。

ユリウス日としての REAL。先発グレゴリオ暦による紀元前 4714 年 11 月 24 日のグリニッジ正午からの日数。

UNIX 時間としての INTEGER、1970-01-01 00:00:00 UTC からの秒数。

アプリケーションは、これらの形式のいずれかで日付と時刻を保存することを選択し、組み込みの日付と時刻関数を使用して形式を自由に変換できます。

これらのいずれかをプログラムに使用できます。Java も内部的に a を使用しlongて日時値を表すことに注意してください。1970-01-01 00:00:00 UTC からのミリ秒をカウントするため、SQLite INTEGER 形式に簡単に変換できます。

于 2013-11-10T08:32:40.987 に答える