このサイトにはプロモーションが含まれます

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);

やんやん

プログラマーとしてLEMP環境に主に生息しており、DevOps 的な立ち回りをしながらご飯を食べている当ブログの管理人のやんやんと申します。
最近はTmux使うのを辞めました。

 

補足

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

この方法を使えば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でフォローしよう

読んでみーな
おすすめの記事