JavaでDBのDATE型を扱う時の注意点

気をつけること

JavaでSQLを扱う際に気をつけないといけないのが「SQLから受け取った値を扱える型をJava側で用意する」ことです。

もしJava側でSQLの値を扱える型が用意できなければ、DBに保存されている値を間違った形で取得してしまい、整合性のないプログラムになってしまいます。

まずは、SQLとJavaの型の対応を見ていきましょう。(OracleDBで自分がよく使うデータ型)

SQL Java
CHAR String
VARCHAR2
NUMBER int
float
byte
DATE java.sql.Date
TIMESTAMP java.sql.Timestamp

ここで気をつけなければ行けないのが日付を扱うDATE型とTIMESTAMP型です。

DATE型とは「年・月・日」を扱うデータ方に対してTIMESTAMP型は日付と時刻を扱うデータ型になります。

−−DATE型(YYYY/MM/DD) 
2021/08/20

--TIMESTAMP型(YYYY/MM/DD HH:MM:SS)
2021/08/20 12:30:25

日付を扱うDATE型やTIMESTAMP型も文字列を扱う際のようにString一つで扱えたら良いのですが、Javaではそこが難しいです。

下記のようなコードで対応しましょう。

/*DATE*/
String sql = "SELECT 登録日 FROM SAMPLE LIMIT1";
PreparedStatement ps = con.preparedStatement(sql);
ResultSet rs = ps.excuteQuery();

java.util.Date date = new java.util.Date();  −−DATE型を扱えるパッケージの呼び出し
date = rs; 

/*TIMESTAMP*/
String sql = "SELECT 登録日 FROM SAMPLE LIMIT1";
PreparedStatement ps = con.preparedStatement(sql);
ResultSet rs = ps.excuteQuery();

java.sql.Timestamp ts = rs.getTimesatamp(1);
java.util.Date date = new Date(1);

補足

日付型の変換はよく使用するので紹介しておきます。

この方法を使えばSQLの型をあまり気にせずにJava側で値を受け取ることができまーす。

/*日付型を文字列に変換*/
SELECT TO_CHAR('登録日, YYYY/MM/DD'),
               TO_CHAR('登録日, YYYY/MM/DD HH12:MM:SS')  --12時間形式
               TO_CHAR('登録日, YYYY/MM/DD HH24:MM:SS')  --24時間形式
/*文字列を日付型に変換*/
SELECT TO_DATE('登録日, YYYY/MM/DD'),TO_DATE('登録日, YYYY/MM/DD HH12:MM:SS') --12時間形式
TO_DATE('登録日, YYYY/MM/DD HH24:MM:SS') --24時間形式

 

Twitterでフォローしよう

おすすめの記事