在Android上运行SQLite时出现意外结果
我在Android设备上的SQLite中有这个表:在Android上运行SQLite时出现意外结果,android,sqlite,date,Android,Sqlite,Date,我在Android设备上的SQLite中有这个表: CREATE TABLE IF NOT EXISTS MEN(_id INTEGER PRIMARY KEY AUTOINCREMENT, Tdate date, Weight float, Total float, BMI float); 我以此日期格式插入数据(31/05/2011 22:34) 我运行如下查询: SELECT _id,Tdate,Weight,Total,BM
CREATE TABLE IF NOT EXISTS MEN(_id INTEGER PRIMARY KEY AUTOINCREMENT,
Tdate date, Weight float, Total float, BMI float);
我以此日期格式插入数据(31/05/2011 22:34)
我运行如下查询:
SELECT _id,Tdate,Weight,Total,BMI FROM MEN ORDER BY Tdate desc
但我看到数据没有分类:
31/05/2013 22:20
31/05/2013 19:06
29/04/2013 17:33
02/06/2013 19:25
02/06/2013 19:24
到目前为止,注释部分是正确的-SQLite实际上不支持日期类型 虽然人们通常建议将日期存储为文本,例如“YYYY-MM-DD HH:MM:SS.SSS”,但这并不表示时区,除非您在字符串格式中也包含时区。如果不指定时区,SQLite函数将使用UTC,这可能不是您所期望的 我相信最好的解决方案(除非您需要毫秒精度)是存储一个包含Unix历元时间的整数(自1970年1月1日午夜UTC起的秒数)。SQLite日期函数直接支持这一点
如果需要毫秒,我会考虑将日期存储为java时代(从UTC 01, 1970以来的毫秒数)-Unix EngCH大约是java时代/ 1000。但是,在这种情况下,如果使用SQLite函数,则在使用它们时必须除以1000,并且会丢失毫秒精度
看到和注意,要特别小心漏洞-您应该绑定参数,而不是将它们连接到sql语句中。到目前为止的注释部分正确-SQLite并不真正支持日期类型 虽然人们通常建议将日期存储为文本,例如“YYYY-MM-DD HH:MM:SS.SSS”,但这并不表示时区,除非您在字符串格式中也包含时区。如果不指定时区,SQLite函数将使用UTC,这可能不是您所期望的 我相信最好的解决方案(除非您需要毫秒精度)是存储一个包含Unix历元时间的整数(自1970年1月1日午夜UTC起的秒数)。SQLite日期函数直接支持这一点
如果需要毫秒,我会考虑将日期存储为java时代(从UTC 01, 1970以来的毫秒数)-Unix EngCH大约是java时代/ 1000。但是,在这种情况下,如果使用SQLite函数,则在使用它们时必须除以1000,并且会丢失毫秒精度
看到和注意,要特别小心漏洞-你应该绑定你的参数,而不是将它们连接到sql语句中。insert命令将非常有用SQLite没有任何
Date
datatype!!!!!我弄错了吗@samrad是正确的sqlite不支持日期数据类型。因为sqlite没有日期类型,date
列的类型是TEXT
,所以结果按字母顺序排序。最简单的解决方案是将日期格式更改为“YYYY-MM-DD HH:MM:SS.SSS”,如果可能的话。insert命令将非常有用SQLite没有任何date
datatype!!!!!我弄错了吗@samrad是正确的sqlite不支持日期数据类型。因为sqlite没有日期类型,date
列的类型是TEXT
,所以结果按字母顺序排序。如果可能的话,最简单的解决方案是将日期格式更改为类似“YYYY-MM-DD HH:MM:SS.SSS”的格式。
31/05/2013 22:20
31/05/2013 19:06
29/04/2013 17:33
02/06/2013 19:25
02/06/2013 19:24