java.sql.Date
日本語 | SQL日付 |
英語 | java sql date |
ふりがな | じゃばえすきゅーえるでーと |
フリガナ | ジャバエスキューエルデート |
J2SEに含まれるクラスのひとつ。パッケージも含めたクラス名はjava.sql.Date。
日付を格納するためのクラス。
同名のクラスにjava.util.Dateクラスがある。java.util.Dateクラスに対して、java.sql.DateはSQLのDATE型に対応したクラスである。PreparedStatementインターフェイスのsetDate()メソッド及びgetDate()メソッドでは、java.util.Dateクラスではなくjava.sql.Dateクラスを使用する。
クラス名が同じため、しばしばコンパイルエラーの原因となる。意外と気付きにくいため注意。
また、java.sql.Dateクラスはjava.util.Dateクラスのサブクラスであるが、それゆえ、無理なダウンキャスト等によってバグをうむ場合もある。
この問題はデータベースプログラミングにおいてありがちな問題のため注意すること。とはいえ、そもそもJavaで最も使用される日時クラスであるCalendarクラスを使用していればこの問題は起きにくい。
Calendarクラスから変換する場合には、Dateクラスの引数にgetTimeInMillis()メソッドの戻り値を渡せばよい。また、java.sql.Dateクラスはjava.util.Dateクラスのサブクラスのため、Calendarクラスへの変換等はjava.util.Dateクラスと同様に行える。
日付を格納するためのクラス。
同名のクラスにjava.util.Dateクラスがある。java.util.Dateクラスに対して、java.sql.DateはSQLのDATE型に対応したクラスである。PreparedStatementインターフェイスのsetDate()メソッド及びgetDate()メソッドでは、java.util.Dateクラスではなくjava.sql.Dateクラスを使用する。
クラス名が同じため、しばしばコンパイルエラーの原因となる。意外と気付きにくいため注意。
また、java.sql.Dateクラスはjava.util.Dateクラスのサブクラスであるが、それゆえ、無理なダウンキャスト等によってバグをうむ場合もある。
この問題はデータベースプログラミングにおいてありがちな問題のため注意すること。とはいえ、そもそもJavaで最も使用される日時クラスであるCalendarクラスを使用していればこの問題は起きにくい。
Calendarクラスから変換する場合には、Dateクラスの引数にgetTimeInMillis()メソッドの戻り値を渡せばよい。また、java.sql.Dateクラスはjava.util.Dateクラスのサブクラスのため、Calendarクラスへの変換等はjava.util.Dateクラスと同様に行える。
// Sample.java
import java.util.Calendar;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.Statement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class Sample
{
public static void main( String[] args )
{
Connection conn = null;
PreparedStatement psCreate = null;
PreparedStatement psInsert = null;
Statement stmt = null;
ResultSet rs = null;
try
{
// まずJDBCドライバを読み込みます。
Class.forName( "org.hsqldb.jdbcDriver" );
// JDBCに接続してコネクションを取得します。
String url = "jdbc:hsqldb:mem:aname";
String user = "sa";
String password = "";
conn = DriverManager.getConnection( url, user, password );
// テスト用テーブルを作ります。
// 列の型をDATE型にします。
psCreate = null;
final String SQL_CREATE = "CREATE TABLE TABLE_TEST( INSERT_DATE DATE );";
psCreate = conn.prepareStatement( SQL_CREATE );
psCreate.execute();
// そのテーブルに1行INSERTします。
final String SQL_INSERT = "INSERT INTO TABLE_TEST VALUES( ? );";
psInsert = conn.prepareStatement( SQL_INSERT );
// 今日の日付をセットします。
// このDateクラスは、java.util.Dateではなく、java.sql.Dateクラスです。
Date now = new Date( Calendar.getInstance().getTimeInMillis() );
psInsert.setDate( 1, now );
psInsert.execute();
// INSERTしたデータをSELECTでクエリーします。
stmt = conn.createStatement();
final String SQL_SELECT = "SELECT INSERT_DATE FROM TABLE_TEST;";
rs = stmt.executeQuery( SQL_SELECT );
while( rs.next() )
{
// このDateクラスも、java.sql.Dateクラスです。
Date insert_date = rs.getDate( "INSERT_DATE" );
System.out.println( insert_date );
}
// 2005-06-27
}
catch( SQLException e )
{
// SQLの実行で問題があった場合に投げられます。
e.printStackTrace();
}
catch( ClassNotFoundException e )
{
// JDBCドライバが存在しなかった場合に投げられます。
e.printStackTrace();
}
finally
{
if( rs != null )
{
try
{
rs.close();
}
catch( SQLException e )
{
// 各close()メソッドからもSQLException例外が
// 投げられるので、拾っておきます。
e.printStackTrace();
}
}
if( stmt != null )
{
try
{
stmt.close();
}
catch( SQLException e )
{
// 各close()メソッドからもSQLException例外が
// 投げられるので、拾っておきます。
e.printStackTrace();
}
}
if( psInsert != null )
{
try
{
psInsert.close();
}
catch( SQLException e )
{
// 各close()メソッドからもSQLException例外が
// 投げられるので、拾っておきます。
e.printStackTrace();
}
}
if( psCreate != null )
{
try
{
psCreate.close();
}
catch( SQLException e )
{
// 各close()メソッドからもSQLException例外が
// 投げられるので、拾っておきます。
e.printStackTrace();
}
}
if( conn != null )
{
try
{
conn.close();
}
catch( SQLException e )
{
// 各close()メソッドからもSQLException例外が
// 投げられるので、拾っておきます。
e.printStackTrace();
}
}
}
}
}
import java.util.Calendar;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.Statement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class Sample
{
public static void main( String[] args )
{
Connection conn = null;
PreparedStatement psCreate = null;
PreparedStatement psInsert = null;
Statement stmt = null;
ResultSet rs = null;
try
{
// まずJDBCドライバを読み込みます。
Class.forName( "org.hsqldb.jdbcDriver" );
// JDBCに接続してコネクションを取得します。
String url = "jdbc:hsqldb:mem:aname";
String user = "sa";
String password = "";
conn = DriverManager.getConnection( url, user, password );
// テスト用テーブルを作ります。
// 列の型をDATE型にします。
psCreate = null;
final String SQL_CREATE = "CREATE TABLE TABLE_TEST( INSERT_DATE DATE );";
psCreate = conn.prepareStatement( SQL_CREATE );
psCreate.execute();
// そのテーブルに1行INSERTします。
final String SQL_INSERT = "INSERT INTO TABLE_TEST VALUES( ? );";
psInsert = conn.prepareStatement( SQL_INSERT );
// 今日の日付をセットします。
// このDateクラスは、java.util.Dateではなく、java.sql.Dateクラスです。
Date now = new Date( Calendar.getInstance().getTimeInMillis() );
psInsert.setDate( 1, now );
psInsert.execute();
// INSERTしたデータをSELECTでクエリーします。
stmt = conn.createStatement();
final String SQL_SELECT = "SELECT INSERT_DATE FROM TABLE_TEST;";
rs = stmt.executeQuery( SQL_SELECT );
while( rs.next() )
{
// このDateクラスも、java.sql.Dateクラスです。
Date insert_date = rs.getDate( "INSERT_DATE" );
System.out.println( insert_date );
}
// 2005-06-27
}
catch( SQLException e )
{
// SQLの実行で問題があった場合に投げられます。
e.printStackTrace();
}
catch( ClassNotFoundException e )
{
// JDBCドライバが存在しなかった場合に投げられます。
e.printStackTrace();
}
finally
{
if( rs != null )
{
try
{
rs.close();
}
catch( SQLException e )
{
// 各close()メソッドからもSQLException例外が
// 投げられるので、拾っておきます。
e.printStackTrace();
}
}
if( stmt != null )
{
try
{
stmt.close();
}
catch( SQLException e )
{
// 各close()メソッドからもSQLException例外が
// 投げられるので、拾っておきます。
e.printStackTrace();
}
}
if( psInsert != null )
{
try
{
psInsert.close();
}
catch( SQLException e )
{
// 各close()メソッドからもSQLException例外が
// 投げられるので、拾っておきます。
e.printStackTrace();
}
}
if( psCreate != null )
{
try
{
psCreate.close();
}
catch( SQLException e )
{
// 各close()メソッドからもSQLException例外が
// 投げられるので、拾っておきます。
e.printStackTrace();
}
}
if( conn != null )
{
try
{
conn.close();
}
catch( SQLException e )
{
// 各close()メソッドからもSQLException例外が
// 投げられるので、拾っておきます。
e.printStackTrace();
}
}
}
}
}
// Sample.java import java.util.Calendar; import java.sql.Date; import java.sql.DriverManager; import java.sql.Connection; import java.sql.Statement; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class Sample { public static void main( String[] args ) { Connection conn = null; PreparedStatement psCreate = null; PreparedStatement psInsert = null; Statement stmt = null; ResultSet rs = null; try { // まずJDBCドライバを読み込みます。 Class.forName( "org.hsqldb.jdbcDriver" ); // JDBCに接続してコネクションを取得します。 String url = "jdbc:hsqldb:mem:aname"; String user = "sa"; String password = ""; conn = DriverManager.getConnection( url, user, password ); // テスト用テーブルを作ります。 // 列の型をDATE型にします。 psCreate = null; final String SQL_CREATE = "CREATE TABLE TABLE_TEST( INSERT_DATE DATE );"; psCreate = conn.prepareStatement( SQL_CREATE ); psCreate.execute(); // そのテーブルに1行INSERTします。 final String SQL_INSERT = "INSERT INTO TABLE_TEST VALUES( ? );"; psInsert = conn.prepareStatement( SQL_INSERT ); // 今日の日付をセットします。 // このDateクラスは、java.util.Dateではなく、java.sql.Dateクラスです。 Date now = new Date( Calendar.getInstance().getTimeInMillis() ); psInsert.setDate( 1, now ); psInsert.execute(); // INSERTしたデータをSELECTでクエリーします。 stmt = conn.createStatement(); final String SQL_SELECT = "SELECT INSERT_DATE FROM TABLE_TEST;"; rs = stmt.executeQuery( SQL_SELECT ); while( rs.next() ) { // このDateクラスも、java.sql.Dateクラスです。 Date insert_date = rs.getDate( "INSERT_DATE" ); System.out.println( insert_date ); } // 2005-06-27 } catch( SQLException e ) { // SQLの実行で問題があった場合に投げられます。 e.printStackTrace(); } catch( ClassNotFoundException e ) { // JDBCドライバが存在しなかった場合に投げられます。 e.printStackTrace(); } finally { if( rs != null ) { try { rs.close(); } catch( SQLException e ) { // 各close()メソッドからもSQLException例外が // 投げられるので、拾っておきます。 e.printStackTrace(); } } if( stmt != null ) { try { stmt.close(); } catch( SQLException e ) { // 各close()メソッドからもSQLException例外が // 投げられるので、拾っておきます。 e.printStackTrace(); } } if( psInsert != null ) { try { psInsert.close(); } catch( SQLException e ) { // 各close()メソッドからもSQLException例外が // 投げられるので、拾っておきます。 e.printStackTrace(); } } if( psCreate != null ) { try { psCreate.close(); } catch( SQLException e ) { // 各close()メソッドからもSQLException例外が // 投げられるので、拾っておきます。 e.printStackTrace(); } } if( conn != null ) { try { conn.close(); } catch( SQLException e ) { // 各close()メソッドからもSQLException例外が // 投げられるので、拾っておきます。 e.printStackTrace(); } } } } }