我正在开发一个虚拟的 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'))");
Run Code Online (Sandbox Code Playgroud)
我确定数据库具有给定的列,如果我只是使用:
database.execSQL("Insert Into todos(uid, name) values('6a7047ed-c2f9-407f-a774-1c02b0fe9caf', 'todo')");
Run Code Online (Sandbox Code Playgroud)
应用程序按其应有的方式工作。
我试图插入这样的日期(基于与此事相关的回答问题):
'2012-05-25 16:52:00'
Run Code Online (Sandbox Code Playgroud)
或者
date('now')
Run Code Online (Sandbox Code Playgroud)
我得到了同样的崩溃,没有错误或调试日志。
我在这里缺少什么?
更新
根据要求,用于创建数据库表的代码。
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 "
+");";
Run Code Online (Sandbox Code Playgroud)
您的问题是您声明的数据类型在 SQlite 中不存在。从文档:
” 1.2 日期和时间数据类型
SQLite 没有专门用于存储日期和/或时间的存储类。相反,SQLite 的内置日期和时间函数能够将日期和时间存储为 TEXT、REAL 或 INTEGER 值:
TEXT 作为 ISO8601 字符串(“YYYY-MM-DD HH:MM:SS.SSS”)。REAL 作为儒略日数,根据预测的格里高利历,自公元前 4714 年 11 月 24 日格林威治中午以来的天数。INTEGER 作为 Unix 时间,自 1970-01-01 00:00:00 UTC 以来的秒数。
应用程序可以选择以任何这些格式存储日期和时间,并使用内置的日期和时间函数在格式之间自由转换。”
因此,更改数据库中的数据类型,重新创建它,并更改从这些列插入/更新/检索数据的方法,以匹配正确的数据类型,这样对您来说应该会更好。
| 归档时间: |
|
| 查看次数: |
19548 次 |
| 最近记录: |