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

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

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

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

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

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

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

          我就研究了SqliteConnection的源代碼,發(fā)現(xiàn)Sqlite不是用的什么全球的UTC時間.
          其實(shí)就是用的國際標(biāo)準(zhǔn)ISO 8601標(biāo)準(zhǔn).

          那我就著手看怎么才能讓我的程序和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....(其實(shí)我也不明白那個T有什么關(guān)鍵作用,反正Access,MySql,MsSql都沒這問題的)

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

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

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

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

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

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



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

          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

          主站蜘蛛池模板: 牙克石市| 呼伦贝尔市| 宝清县| 苏尼特右旗| 启东市| 德庆县| 昂仁县| 盐源县| 德兴市| 阆中市| 临漳县| 福清市| 清镇市| 保亭| 内江市| 延安市| 娄烦县| 竹山县| 绿春县| 青浦区| 建宁县| 鹤岗市| 岐山县| 三穗县| 衡南县| 新田县| 和静县| 汉中市| 新安县| 龙泉市| 辛集市| 沙田区| 八宿县| 高州市| 赣州市| 孝义市| 德格县| 衡山县| 合作市| 余姚市| 东兰县|