LabManageプロジェクト概要2

1547 ワード

最近ずっと悩んでいる問題の1つは、bean、あるいはエンティティのDateタイプの属性をどのように言って、データベースに保存するかです.
データベース内のフィールドタイプはDatetimeタイプです.
最初はいろいろな方法を探しました.
まず、javaを報告します.util.Dateとjavasql.Dateが異常に一致しない場合、まず考えられるのは変換です.
// bean Date 
java.sql.Date d = new java.sql.Date(bean.getDate().getTime());
上のコードは変換を実現したが、setDateはデータベースに格納され、発見日は正しいが、時間はすべて0である.
Javaのドキュメントは本当によく調べなければなりませんが、javaのドキュメントはすでに明記されています.なぜ時間がありませんか.
ミリ秒値をパッケージしたスリムパッケージ(thin wrapper)で、JDBCがミリ秒値をSQL DATE値として識別できるようにします.ミリ秒値は、1970年1月1日00:00:00:00 GMT以降のミリ秒数を表します.
SQL DATEの定義と一致するように、java.sql.Dateインスタンスによってカプセル化されたミリ秒の値は、インスタンスに関連する特定のタイムゾーンのゼロに時間、分、秒、およびミリ秒を設定することによって「正規化」される必要があります.
データベースのDateタイプと一致するようにjava仕様でもDateタイプをこうしています.データベースのDateタイプには時間がありません.Datetimeは時間があります.
この时、一つのタイプを思い出して、Timestamp、私达はデータベースから持つ时、时間を取りたいと思って、Timestampを持ってやっと时間を手に入れます.
それをDateをTimestampに変換すればOkになるでしょう.
OK.
java.sql.Timestamp tDate = new java.sql.Timestamp(bean.getDate().getTime);
pstmt.setTimestamp(tDate);

このように一言で、終わります.
もちろん、他にも多くの方法がありますが、データベースをvarcharに直接設計したり、longタイプにしたり、formatを後で直接保存したりすることもできます.
このように書くこともできます.
String str =bean.getDate()+" "+bean.getTime();    
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");    
        Date date = sdf.parse(str);    
        java.sql.Timestamp sqlDate = new java.sql.Timestamp(date.getTime());    
        db.setDate1(sqlDate);
はすべてOKです.