隨筆 - 312, 文章 - 14, 評論 - 1393, 引用 - 0
          數據加載中……

          Sqlite DateTime 類型 讀取和寫入格式 注意的問題

          今天遇到個問題.
          首先插入一個DataTime格式的數據:
          string sql="insert into [table] (date_time) values('" + date_time.ToString() + "'";
          執行如上命令.插入沒有報告錯誤.

          但是,我又用一條命令讀取時:
          string sql="select * from [table];
          .....
          IDataReader dr=cmd.ExecuteReader();
          ...
          object obj=dr["data_time"];//在這里出錯了,說是無法轉換為DataTime格式,字符串不正確

          --------------------------------------------------------------------------------------------

          我找了一天的教程,找了一天的google.
          答案是:sqlite用的全球時間UTC,要用datetime()函數轉換若干.
          我也試了,發現好像運行的不像教程上說的那樣!

          實在沒辦法,來硬的吧,硬著頭皮看源代碼吧.
          他的繼承格式大致如下:
          SqliteConvert-->SqliteBase-->Sqlite3
          在SqliteConvert中定義了轉換格式,上面說的很明白,默認DataTime格式為 ISO8601
          然后,SqliteConnection 用到了Sqlite3.

          我就研究了SqliteConnection的源代碼,發現Sqlite不是用的什么全球的UTC時間.
          其實就是用的國際標準ISO 8601標準.

          那我就著手看怎么才能讓我的程序和sqlite兼容.
          我生成的字符串和sqlite的有什么不同.

          最后看了msdn上對iso 8601的描述:(http://msdn.microsoft.com/zh-cn/library/ms187819.aspx)
          給出了字符串示例:
          * 2004-05-23T14:25:10
          * 2004-05-23T14:25:10.487

          而我生成的字符串 data_time.ToString()和他的有一個不同的地方.
          就是沒有那個T....(其實我也不明白那個T有什么關鍵作用,反正Access,MySql,MsSql都沒這問題的)

          我又在想,如果我用一個T會如何?
          就嘗試.用data_time.ToString("s");這種方法轉換成 iso 8601標準字符串格式

          結果我吃屎吃了個醬板頭(無錫話,意思是運氣好),竟然成功了.

          如下:
          string sql="insert into [table] (date_time)" values('" + date_time.ToString("s") + "'";

          這樣,問題就解決了,希望大家能夠看到此貼,并發揚光大,到處流傳,這樣才能發展Sqlite的普及率.

          附注:
          我起先研究了BBSMAX的Sqlite數據庫.我認為這個論壇會有好的解決方法.
          但我錯了.其實沒有.bbsMax用了varchar代替DateTime格式.
          我也照做了,但是當我用到 select * from [table] where date_time > '2006-1-1' and date_time< '2008-1-1'
          類似這樣的語句,想查詢一個中間的時間類型時,語法錯誤.

          所以,到頭來,我還是從頭開始研究DateTime格式.字符串格式雖然能夠湊合,但是卻沒有那么方便和強大.



          Android開發完全講義(第2版)(本書版權已輸出到臺灣)

          http://product.dangdang.com/product.aspx?product_id=22741502



          Android高薪之路:Android程序員面試寶典 http://book.360buy.com/10970314.html


          新浪微博:http://t.sina.com.cn/androidguy   昵稱:李寧_Lining

          posted on 2009-08-18 17:58 銀河使者 閱讀(3094) 評論(0)  編輯  收藏 所屬分類: databases

          主站蜘蛛池模板: 洪湖市| 海晏县| 尚志市| 贺州市| 台山市| 确山县| 无极县| 迭部县| 涞源县| 诸暨市| 永康市| 弋阳县| 长乐市| 保康县| 巢湖市| 灌云县| 云霄县| 沭阳县| 五台县| 特克斯县| 屯门区| 电白县| 宿松县| 锦屏县| 古丈县| 多伦县| 凤冈县| 宝清县| 遵义县| 井陉县| 商丘市| 界首市| 旺苍县| 竹北市| 通许县| 全州县| 吴旗县| 石景山区| 章丘市| 太康县| 上栗县|