隨筆 - 312, 文章 - 14, 評論 - 1393, 引用 - 0

          導航

          <2009年8月>
          2627282930311
          2345678
          9101112131415
          16171819202122
          23242526272829
          303112345

          公告

          關注我的新浪微博

          我的著作









          常用鏈接

          留言簿(126)

          我參與的團隊

          隨筆分類(818)

          隨筆檔案(310)

          文章分類(1)

          文章檔案(8)

          相冊

          ADSL、3G查詢

          CSDN

          eclipse

          ibm

          Java EE

          Linux

          Web

          云服務

          代理網站

          關注的網站

          協議

          喜歡的Blog

          國內廣告平臺

          圖書出版

          在線培訓

          開發工具

          微博客戶端

          手機鈴聲

          操作系統

          • ReactOS
          • 一個與windowXP/2003兼容的操作系統

          數學

          文件格式

          源碼資源

          移動(Mobile)

          編程語言

          英語學習

          最新隨筆

          搜索

          •  

          積分與排名

          • 積分 - 1974490
          • 排名 - 6

          最新評論

          閱讀排行榜

          評論排行榜

          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 銀河使者 閱讀(3096) 評論(0)  編輯  收藏 所屬分類: databases

          主站蜘蛛池模板: 正阳县| 武宣县| 惠东县| 平远县| 金华市| 大方县| 榆社县| 庄河市| 洮南市| 田阳县| 丹巴县| 湘潭市| 崇左市| 金乡县| 辽阳县| 邢台市| 循化| 乌审旗| 甘南县| 乌鲁木齐县| 栾城县| 阿拉尔市| 凤山县| 蓬莱市| 横山县| 上杭县| 叙永县| 和平区| 高平市| 沛县| 恩施市| 广汉市| 西宁市| 定兴县| 长兴县| 青冈县| 藁城市| 霸州市| 武山县| 平顺县| 昌都县|