2013-06-02 102 views
0

運行SQLite的意外結果我在SQLite的這個表Android設備上:在Android

CREATE TABLE IF NOT EXISTS MEN(_id INTEGER PRIMARY KEY AUTOINCREMENT, 
           Tdate date, Weight float, Total float, BMI float); 

我在此日期格式(31/05/2011 22點34分)

String Tdate = android.text.format.DateFormat.format("dd/MM/yyyy k:mm", new java.util.Date()); 

    SQL = "insert into MEN (Tdate,Weight,Total,BMI) values ('"; 
    SQL += Tdate + "','" + ThisWeight + "','" + Total + "','" + BMI+ "')"; 
插入數據

我運行這樣的查詢:

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 
+0

插入命令真的會有幫助 – MDMalik

+0

SQLite沒有任何'Date'數據類型!!!!!我錯了嗎? [數據類型在SQLite](http://www.sqlite.org/datatype3.html) –

+0

@samrad是正確的sqlite不支持日期數據類型[鏈接](http://www.sqlite.org/datatype3.html )。 –

回答

3

到目前爲止的評論部分正確 - SQLite並不真正支持日期類型。

儘管人們建議將日期存儲爲文本是常見的,例如, 「YYYY-MM-DD HH:MM:SS.SSS」,這不會解決時區問題,除非您也將其包含在字符串格式中。如果你不指定時區,SQLite函數將使用UTC,這可能不是你所期待的。我相信最好的解決方案(除非你需要毫秒的準確度)是存儲一個包含Unix Epoch時間的整數(UTC時間1970年1月1日午夜以來的秒數)。 SQLite日期函數直接支持這一點。

如果您需要毫秒,我會考慮將日期存儲爲Java Epoch時間(從UTC時間01年1月1日午夜開始的毫秒數) - Unix紀元約爲Java Epoch/1000.然而,在這種情況下,如果您'使用SQLite函數,使用它們時必須除以1000,並且您將失去毫秒精度。

http://www.sqlite.org/datatype3.htmlhttp://www.sqlite.org/lang_datefunc.html

附:要小心SQL Injection漏洞 - 你應該綁定你的參數,而不是將它們連接成一個sql語句。