2

私は物事のこつを得るためにダミーのアンドロイドプロジェクトに取り組んでいます。次のコード行は、エラーなしでAndroidアプリケーションを壊します。私はIDEとしてIdeaを使用しています。

database.execSQL("Insert Into todos(uid, name, created_on, changed_on) values('6a7047ed-c2f9-407f-a774-1c02b0fe9caf', 'todo', DATETIME('NOW'), DATETIME('NOW'))");

データベースには指定された列があると確信しています。使用する場合は次のようになります。

database.execSQL("Insert Into todos(uid, name) values('6a7047ed-c2f9-407f-a774-1c02b0fe9caf', 'todo')");

アプリケーションは正常に動作します。

私はこのような日付を挿入しようとしました(この問題に関連する回答済みの質問に基づいて):

 '2012-05-25 16:52:00'

また

 date('now')

エラーやデバッグログなしで同じクラッシュが発生します。

ここで何が欠けていますか?

更新しました

要求に応じて、データベーステーブルの作成に使用されるコード。

    public static final String TABLE_TODOS = "todos";
    public static final String COLUMN_ID = "id";
    public static final String COLUMN_UID = "uid";
    public static final String COLUMN_NAME = "name";
    public static final String COLUMN_CHECKED = "checked";
    public static final String COLUMN_TO_DELETE = "must_delete";
    public static final String COLUMN_CHANGED_ON = "changed_on";

    public static final String COLUMN_CREATED = "created_on";

    private static final String DATABASE_CREATE = "create table "
            + TABLE_TODOS + "( "
            + COLUMN_ID + " integer primary key autoincrement, "
            + COLUMN_UID + " varchar(50), "
            + COLUMN_NAME + " text not null, "
            + COLUMN_CHECKED + " integer default 0, "
            + COLUMN_TO_DELETE + " integer default 0, "
            + COLUMN_CHANGED_ON + " datetime "
            + COLUMN_CREATED + " datetime "
            +");";
4

3 に答える 3

5

あなたの問題は、SQlite に存在しないデータ型を宣言していることです。ドキュメントから:

" 1.2 日付と時刻のデータ型

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 からの秒数。

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

したがって、データベースのデータ型を変更して再作成し、それらの列からデータを挿入/更新/取得する方法を変更して、適切なデータ型に一致させると、うまくいくはずです。

于 2012-05-25T18:11:54.203 に答える
3

テーブルの create ステートメントの created_on 列の前にカンマがありません。

+ COLUMN_CHANGED_ON + " datetime "

する必要があります

+ COLUMN_CHANGED_ON + " datetime, "
于 2012-05-25T18:22:14.517 に答える
2

独自のドキュメントによると、SQLite は正しいデータ型を使用して、アフィニティ データ型の規則に従ってhttp://www.sqlite.org/datatype3.htmlNUMERICを記録します。アフィニティの表を参照してください。DATETIME

COLUMN_CHANGED_ON + " datetime "

する必要があります

COLUMN_CHANGED_ON + " NUMERIC, "

正しいアフィニティデータ型を使用すると、値を比較できます。

SELECT b < '40', b < '60', b < '600' FROM t1;
于 2013-07-30T12:51:20.980 に答える