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




