JavaA2Z

KAB-studio > プログラミング > JavaA2Z > java.sql.Dateとは

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クラスと同様にえる。

(KAB-studioからのおしらせです)

サンプルプログラム(とか)サンプルを別ウィンドウで表示サンプルをクリップボードへコピー(WindowsでIEの場合のみ)

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

この単語を含むページ

「みだし」に含まれているページ

「解説」に含まれているページ

「サンプルプログラムとか」に含まれているページ

はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
Yahoo!ブックマーク 詳細を表示 users
del.icio.us 登録する RSSに登録
サンプルを別ウィンドウで表示
サンプルをクリップボードへコピー(WindowsでIEの場合のみ)
update:2005/06/27
このページは、Javaプログラミング言語についての用語を網羅した辞書「JavaA2Z」の一ページです。
詳しくは「JavaA2Z」表紙の説明をご覧ください。