JavaA2Z

KAB-studio > プログラミング > JavaA2Z > SQLExceptionとは

SQLException

日本語 構造化問合せ言語例外
英語 Structured Query Language exception
ふりがな えすきゅーえるえくせぷしょん
フリガナ エスキューエルエクセプション

解説

SQL例外
J2SEに含まれるクラスのひとつ。パッケージも含めたクラス名java.sql.SQLException。
例外の一種。JDBCを使用してSQLを使用した際に問題が発生するとSQLExceptionが投げられる
 
「問題」とは、そのほとんどがSQL時ののもであり、本当に例外的なことは少ない。たとえば「テーブル名が違う」「名が違う」「が違う」「主キーが重複するようなデータをINSERTしようとした」などなど。
その全てでSQLException例外投げられるため、例外単位ではどのようなエラーが発生したのか分からない。getErrorCode()メソッドエラーコードを取得できるが、このエラーコードデータベースによって異なるため、エラーが発生した場合に何らかの処理が必要な場合には、データベースのマニュアルでエラーコードを確認し、エラーコードの比較をう必要がある。

参考サイト


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

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

// Sample.java
import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.Statement;
import java.sql.PreparedStatement;
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;
        try
        {
            // この使用例の使用方法についてはSQLの項目を参照してください。
            
            // ドライバをロードします。
            Class.forName( "org.hsqldb.jdbcDriver" );

            // コネクションを取得します。
            String url = "jdbc:hsqldb:mem:aname";
            String user = "sa";
            String password = "";
            conn = DriverManager.getConnection( url, user, password );

            // テーブルを作ります。
            psCreate = null;
            final String SQL_CREATE = "CREATE TABLE TABLE_TEST( NAME VARCHAR PRIMARY KEY, VALUE INT );";
            psCreate = conn.prepareStatement( SQL_CREATE );
            psCreate.execute();

            // 同じ主キーで2回INSERTします。
            final String SQL_INSERT = "INSERT INTO TABLE_TEST VALUES( ?, ? );";
            psInsert = conn.prepareStatement( SQL_INSERT );
            psInsert.setString( 1, "ネーム" );
            psInsert.setInt( 2, 1 );
            psInsert.execute();

            psInsert.setString( 1, "ネーム" );
            psInsert.setInt( 2, 1 );
            psInsert.execute();
        } 
        catch( SQLException e ) 
        {
            // 主キーの列に同じ値をINSERTしようとしたので、SQLException例外が
            // 投げられました。
            e.printStackTrace();
            // java.sql.SQLException: Unique constraint violation:  in statement [INSERT INTO TABLE_TEST VALUES( ?, ? );]
            //     at org.hsqldb.jdbc.jdbcUtil.throwError(Unknown Source)
            //     at org.hsqldb.jdbc.jdbcPreparedStatement.execute(Unknown Source)
            //     at Sample.main(Sample.java:42)

            // 「Unique constraint violation」とは「一意制約違反」という意味です。

            // エラーコードを出力します。
            System.out.println( e.getErrorCode() );
            // -104
            // ただし、これはhsqldbのエラーコード。同じ一意制約違反でも、
            // データベースによってエラーコードは異なります。
        }
        catch( ClassNotFoundException e ) 
        {
            // JDBCドライバが存在しなかった場合に投げられます。
            e.printStackTrace();
        }
        finally
        {
            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.sql.DriverManager;
import java.sql.Connection;
import java.sql.Statement;
import java.sql.PreparedStatement;
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;
        try
        {
            // この使用例の使用方法についてはSQLの項目を参照してください。
            
            // ドライバをロードします。
            Class.forName( "org.hsqldb.jdbcDriver" );

            // コネクションを取得します。
            String url = "jdbc:hsqldb:mem:aname";
            String user = "sa";
            String password = "";
            conn = DriverManager.getConnection( url, user, password );

            // テーブルを作ります。
            psCreate = null;
            final String SQL_CREATE = "CREATE TABLE TABLE_TEST( NAME VARCHAR PRIMARY KEY, VALUE INT );";
            psCreate = conn.prepareStatement( SQL_CREATE );
            psCreate.execute();

            // 同じ主キーで2回INSERTします。
            final String SQL_INSERT = "INSERT INTO TABLE_TEST VALUES( ?, ? );";
            psInsert = conn.prepareStatement( SQL_INSERT );
            psInsert.setString( 1, "ネーム" );
            psInsert.setInt( 2, 1 );
            psInsert.execute();

            psInsert.setString( 1, "ネーム" );
            psInsert.setInt( 2, 1 );
            psInsert.execute();
        } 
        catch( SQLException e ) 
        {
            // 主キーの列に同じ値をINSERTしようとしたので、SQLException例外が
            // 投げられました。
            e.printStackTrace();
            // java.sql.SQLException: Unique constraint violation:  in statement [INSERT INTO TABLE_TEST VALUES( ?, ? );]
            //     at org.hsqldb.jdbc.jdbcUtil.throwError(Unknown Source)
            //     at org.hsqldb.jdbc.jdbcPreparedStatement.execute(Unknown Source)
            //     at Sample.main(Sample.java:42)

            // 「Unique constraint violation」とは「一意制約違反」という意味です。

            // エラーコードを出力します。
            System.out.println( e.getErrorCode() );
            // -104
            // ただし、これはhsqldbのエラーコード。同じ一意制約違反でも、
            // データベースによってエラーコードは異なります。
        }
        catch( ClassNotFoundException e ) 
        {
            // JDBCドライバが存在しなかった場合に投げられます。
            e.printStackTrace();
        }
        finally
        {
            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/05/23
このページは、Javaプログラミング言語についての用語を網羅した辞書「JavaA2Z」の一ページです。
詳しくは「JavaA2Z」表紙の説明をご覧ください。