android - 如何在 Android 下的 SQLite 中正确插入日期时间值?

标签 android sqlite

我正在研究一个虚拟的 android 项目以掌握一些东西。以下代码行毫无错误地破坏了我的 android 应用程序。我正在使用 Idea 作为 IDE。

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

应用程序按应有的方式工作。

我尝试插入这样的日期 ( based on answered question related to this matter ):

 '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 "
            +");";

最佳答案

您的问题是您声明的数据类型在 SQlite 中不存在。来自文档:

"1.2 日期和时间数据类型

SQLite 没有为存储日期和/或时间预留的存储类。相反,SQLite 的内置日期和时间函数能够将日期和时间存储为 TEXT、REAL 或 INTEGER 值:

文本作为 ISO8601 字符串(“YYYY-MM-DD HH:MM:SS.SSS”)。实际作为儒略日数字,自公元前 4714 年 11 月 24 日格林威治中午以来的天数。根据公历。 INTEGER 作为 Unix 时间,自 1970-01-01 00:00:00 UTC 以来的秒数。

应用程序可以选择以这些格式中的任何一种存储日期和时间,并使用内置的日期和时间函数在格式之间自由转换。”

因此,请更改数据库中的数据类型,重新创建它,并更改从这些列插入/更新/检索数据的方法,以匹配正确的数据类型,这样事情应该会更适合您。

关于android - 如何在 Android 下的 SQLite 中正确插入日期时间值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10758505/

相关文章:

android - 根据另一个微调器的选定项目更新微调器

android - 使用 flavor Dimensions 时是否可以排除特定的构建变体?

c - 如何构建 sqlcipher?

sqlite - 加快 SQLite 查询速度

python - 如何检查sqlite数据库中的用户名? Python

Android Listview Item-左右滑动得到一个TimePicker和DatePicker

android - 如何通过dataBinding写入带空格的字符串

android - 将敏感数据保存到 Bundle 中是一个问题吗?

android - 带有 LIMIT 的 SQLite 子查询在 2.3 设备中不起作用

database - 在 Titanium 中插入和显示来自 SQLite 数据库的数据