SQLException
日本語 | 構造化問合せ言語例外 |
英語 | Structured Query Language exception |
ふりがな | えすきゅーえるえくせぷしょん |
フリガナ | エスキューエルエクセプション |
SQL例外。
J2SEに含まれるクラスのひとつ。パッケージも含めたクラス名はjava.sql.SQLException。
例外の一種。JDBCを使用してSQLを使用した際に問題が発生するとSQLExceptionが投げられる。
「問題」とは、そのほとんどがSQL実行時ののもであり、本当に例外的なことは少ない。たとえば「テーブル名が違う」「列名が違う」「型が違う」「主キーが重複するようなデータをINSERTしようとした」などなど。
その全てでSQLException例外が投げられるため、例外単位ではどのようなエラーが発生したのか分からない。getErrorCode()メソッドでエラーコードを取得できるが、このエラーコードはデータベースによって異なるため、エラーが発生した場合に何らかの処理が必要な場合には、データベースのマニュアルでエラーコードを確認し、エラーコードの比較を行う必要がある。
J2SEに含まれるクラスのひとつ。パッケージも含めたクラス名はjava.sql.SQLException。
例外の一種。JDBCを使用してSQLを使用した際に問題が発生するとSQLExceptionが投げられる。
「問題」とは、そのほとんどがSQL実行時ののもであり、本当に例外的なことは少ない。たとえば「テーブル名が違う」「列名が違う」「型が違う」「主キーが重複するようなデータをINSERTしようとした」などなど。
その全てでSQLException例外が投げられるため、例外単位ではどのようなエラーが発生したのか分からない。getErrorCode()メソッドでエラーコードを取得できるが、このエラーコードはデータベースによって異なるため、エラーが発生した場合に何らかの処理が必要な場合には、データベースのマニュアルでエラーコードを確認し、エラーコードの比較を行う必要がある。
参考サイト
// 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();
}
}
}
}
}
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(); } } } } }