
気をつけること
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時間形式




 
                         
                         
                        