基于javaMybatis存進(jìn)時(shí)間戳的問(wèn)題
封裝了一個(gè)實(shí)體類(lèi),里面有個(gè)字段 Integer createTime。
要利用這個(gè)實(shí)體類(lèi)將一個(gè)時(shí)間戳存進(jìn)數(shù)據(jù)庫(kù)中。
剛開(kāi)始的時(shí)候出現(xiàn)錯(cuò)誤:
Data truncation: Incorrect datetime value: ’123456789’ for column ’create_time’ at row 1
是存進(jìn)數(shù)據(jù)庫(kù)的時(shí)候出現(xiàn)了問(wèn)題,個(gè)人理解應(yīng)該是Integer類(lèi)型和數(shù)據(jù)庫(kù)中的Timestamp類(lèi)型不匹配。
之后把封裝類(lèi)里createTime的類(lèi)型變成了Timestamp,但是由于我是用Map<String, Object>傳過(guò)來(lái)的參數(shù),取出來(lái)的值是Object類(lèi)型,轉(zhuǎn)換成Timestamp一直出錯(cuò)(可能是我知道的方法不夠),于是我又把createTime的封裝類(lèi)變成了Date類(lèi)型。代碼大概如下
Long createTime = Long.parseLong(param.get('CreateTime').toString()); //先用Long接收傳過(guò)來(lái)的參數(shù)Member member = new Member(); //實(shí)例化一個(gè)實(shí)體類(lèi)member.setCreateTime(new Date(createTime)); //因?yàn)榉庋b類(lèi)里createTime是Date類(lèi)型,直接new一個(gè)日期,只要把Long類(lèi)型的數(shù)值放進(jìn)去就可以
這樣,將member用Mybatis插入數(shù)據(jù)庫(kù)就不會(huì)出現(xiàn)問(wèn)題了。
Mybatis處理相關(guān)時(shí)間戳格式的數(shù)據(jù)1、程序中直接寫(xiě)SQL語(yǔ)句時(shí):
1)如果插入的是當(dāng)前時(shí)間戳,可以在SQL中直接寫(xiě)SYSTIMESTAMP關(guān)鍵字。
2)如果插入的是前臺(tái)送上來(lái)的時(shí)間,可以在SQL中使用Oracle的函數(shù)進(jìn)行轉(zhuǎn)換to_date或to_timestamp,
to_timestamp(string, fmt)
fmt可以為空,為空時(shí),string必須符合NLS_TIMESTAMP_FORMAT格式,即 ’YYYY-MM-DD HH:MI:SS.FF’
to_date只保存到日期,to_timestamp可以保存到時(shí)分秒
2、通過(guò)Mybatis進(jìn)行映射時(shí)
如果Entity中定義的類(lèi)型為T(mén)imestamp, resultMap中定義的javaType=“java.sql.Timestamp”, SQL語(yǔ)句中定義的jdbcType=TIMESTAMP
如果Entity中定義的類(lèi)型為String,resultMap中定義的javaType='java.lang.String',SQL語(yǔ)句中需要對(duì)參數(shù)進(jìn)行to_timestamp轉(zhuǎn)換,jdbcType=TIMESTAMP
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. CSS3實(shí)例分享之多重背景的實(shí)現(xiàn)(Multiple backgrounds)2. chat.asp聊天程序的編寫(xiě)方法3. 利用CSS制作3D動(dòng)畫(huà)4. 存儲(chǔ)于xml中需要的HTML轉(zhuǎn)義代碼5. javascript xml xsl取值及數(shù)據(jù)修改第1/2頁(yè)6. PHP設(shè)計(jì)模式中工廠模式深入詳解7. 輕松學(xué)習(xí)XML教程8. asp批量添加修改刪除操作示例代碼9. html清除浮動(dòng)的6種方法示例10. HTML5 Canvas繪制圖形從入門(mén)到精通
