Statement
| 日本語 | 命令文 |
| 英語 | statement |
| ふりがな | すてーとめんと |
| フリガナ | ステートメント |
SELECTを実行するためのインターフェイス。
J2SEに含まれるインターフェイスのひとつ。パッケージも含めたインターフェイス名はjava.sql.Statement。
SQLのSELECT文を実行するためのインターフェイス。
インターフェイスのため、newでインスタンスを作ることはできない。代わりにConnectionインターフェイスのcreateStatement()メソッドでインスタンスを作成しその参照を取得する。
SQL文の実行はStatementインターフェイスのexecuteQuery()メソッドで行う。ただし、このメソッドは基本的にSELECT文を実行するためのもので、UPDATE等の変更を伴うSQLを実行する場合にはexecuteUpdate()メソッドを使用する。また、WHEREでパラメーターを指定する場合にはPreparedStatementインターフェイスを使用する。
executeQuery()メソッドはResultSetインターフェイスのインスタンスを返す。各行の値の取得はこのインターフェイスを通して行う。
使用後は必ずclose()メソッドを呼び出し終了処理を行う。このメソッドの呼び出しは、呼び出し忘れを避けるため必ずfinally内で行う。
決して、Statementインターフェイスの参照型変数に、close()メソッドを呼ぶ前に新しい参照をセットしてはならない。このような理由によりclose()メソッドを呼び出さないStatementインターフェイスのインスタンスが残ると、メモリ等の資源が解放されず、後に致命的な問題となり異常終了する可能性もある。
J2SEに含まれるインターフェイスのひとつ。パッケージも含めたインターフェイス名はjava.sql.Statement。
SQLのSELECT文を実行するためのインターフェイス。
インターフェイスのため、newでインスタンスを作ることはできない。代わりにConnectionインターフェイスのcreateStatement()メソッドでインスタンスを作成しその参照を取得する。
SQL文の実行はStatementインターフェイスのexecuteQuery()メソッドで行う。ただし、このメソッドは基本的にSELECT文を実行するためのもので、UPDATE等の変更を伴うSQLを実行する場合にはexecuteUpdate()メソッドを使用する。また、WHEREでパラメーターを指定する場合にはPreparedStatementインターフェイスを使用する。
executeQuery()メソッドはResultSetインターフェイスのインスタンスを返す。各行の値の取得はこのインターフェイスを通して行う。
使用後は必ずclose()メソッドを呼び出し終了処理を行う。このメソッドの呼び出しは、呼び出し忘れを避けるため必ずfinally内で行う。
決して、Statementインターフェイスの参照型変数に、close()メソッドを呼ぶ前に新しい参照をセットしてはならない。このような理由によりclose()メソッドを呼び出さないStatementインターフェイスのインスタンスが残ると、メモリ等の資源が解放されず、後に致命的な問題となり異常終了する可能性もある。
// Sample.java
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
{
// この使用例の使用方法についてはSQLの項目を参照してください。
// JDBCドライバをロードします。
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, VALUE INT );";
psCreate = conn.prepareStatement( SQL_CREATE );
psCreate.execute();
// 行を追加します。
final String SQL_INSERT = "INSERT INTO TABLE_TEST VALUES( ?, ? );";
psInsert = conn.prepareStatement( SQL_INSERT );
for( int iF1 = 0; iF1 < 3; ++iF1 )
{
// 列をインデックスナンバーで指定します。
// 1から始まるので注意。
// NAME列はVARCHAR型なので文字列をセットします。
psInsert.setString( 1, "ネーム" + iF1 );
// VALUE列はINT型なので整数値をセットします。
psInsert.setInt( 2, iF1 );
// execute()メソッドでSQLを実行して、行を追加します。
psInsert.execute();
// 基本的に、下に追加されていくイメージです。
}
// データを取得します。
stmt = conn.createStatement();
// 下のSELECTが、検索を行うSQL文です。この文でデータベースを検索します。
// この例ではTABLE_TESTテーブルの全行を取得し、その中のNAME列とVALUE列を返します。
final String SQL_SELECT = "SELECT NAME, VALUE FROM TABLE_TEST;";
rs = stmt.executeQuery( SQL_SELECT );
// ResultSetクラスのnext()メソッドを呼び出すと1行ずつ取得できます。
// ResultSetクラス内に「カレントの行」が格納されていて、
// next()メソッドを呼ぶことでその行が1つずつ増えていきます。
// もう行がないとfalseを返します。
while( rs.next() )
{
// 行を進めてから、getString()メソッド等で取得します。
// NAME列のデータを文字列として取得します。
String name = rs.getString( "NAME" );
// VALUE列のデータを整数値として取得します。
int value = rs.getInt( "VALUE" );
System.out.println( name + ", " + value );
}
// ネーム0, 0
// ネーム1, 1
// ネーム2, 2
}
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.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
{
// この使用例の使用方法についてはSQLの項目を参照してください。
// JDBCドライバをロードします。
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, VALUE INT );";
psCreate = conn.prepareStatement( SQL_CREATE );
psCreate.execute();
// 行を追加します。
final String SQL_INSERT = "INSERT INTO TABLE_TEST VALUES( ?, ? );";
psInsert = conn.prepareStatement( SQL_INSERT );
for( int iF1 = 0; iF1 < 3; ++iF1 )
{
// 列をインデックスナンバーで指定します。
// 1から始まるので注意。
// NAME列はVARCHAR型なので文字列をセットします。
psInsert.setString( 1, "ネーム" + iF1 );
// VALUE列はINT型なので整数値をセットします。
psInsert.setInt( 2, iF1 );
// execute()メソッドでSQLを実行して、行を追加します。
psInsert.execute();
// 基本的に、下に追加されていくイメージです。
}
// データを取得します。
stmt = conn.createStatement();
// 下のSELECTが、検索を行うSQL文です。この文でデータベースを検索します。
// この例ではTABLE_TESTテーブルの全行を取得し、その中のNAME列とVALUE列を返します。
final String SQL_SELECT = "SELECT NAME, VALUE FROM TABLE_TEST;";
rs = stmt.executeQuery( SQL_SELECT );
// ResultSetクラスのnext()メソッドを呼び出すと1行ずつ取得できます。
// ResultSetクラス内に「カレントの行」が格納されていて、
// next()メソッドを呼ぶことでその行が1つずつ増えていきます。
// もう行がないとfalseを返します。
while( rs.next() )
{
// 行を進めてから、getString()メソッド等で取得します。
// NAME列のデータを文字列として取得します。
String name = rs.getString( "NAME" );
// VALUE列のデータを整数値として取得します。
int value = rs.getInt( "VALUE" );
System.out.println( name + ", " + value );
}
// ネーム0, 0
// ネーム1, 1
// ネーム2, 2
}
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.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
{
// この使用例の使用方法についてはSQLの項目を参照してください。
// JDBCドライバをロードします。
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, VALUE INT );";
psCreate = conn.prepareStatement( SQL_CREATE );
psCreate.execute();
// 行を追加します。
final String SQL_INSERT = "INSERT INTO TABLE_TEST VALUES( ?, ? );";
psInsert = conn.prepareStatement( SQL_INSERT );
for( int iF1 = 0; iF1 < 3; ++iF1 )
{
// 列をインデックスナンバーで指定します。
// 1から始まるので注意。
// NAME列はVARCHAR型なので文字列をセットします。
psInsert.setString( 1, "ネーム" + iF1 );
// VALUE列はINT型なので整数値をセットします。
psInsert.setInt( 2, iF1 );
// execute()メソッドでSQLを実行して、行を追加します。
psInsert.execute();
// 基本的に、下に追加されていくイメージです。
}
// データを取得します。
stmt = conn.createStatement();
// 下のSELECTが、検索を行うSQL文です。この文でデータベースを検索します。
// この例ではTABLE_TESTテーブルの全行を取得し、その中のNAME列とVALUE列を返します。
final String SQL_SELECT = "SELECT NAME, VALUE FROM TABLE_TEST;";
rs = stmt.executeQuery( SQL_SELECT );
// ResultSetクラスのnext()メソッドを呼び出すと1行ずつ取得できます。
// ResultSetクラス内に「カレントの行」が格納されていて、
// next()メソッドを呼ぶことでその行が1つずつ増えていきます。
// もう行がないとfalseを返します。
while( rs.next() )
{
// 行を進めてから、getString()メソッド等で取得します。
// NAME列のデータを文字列として取得します。
String name = rs.getString( "NAME" );
// VALUE列のデータを整数値として取得します。
int value = rs.getInt( "VALUE" );
System.out.println( name + ", " + value );
}
// ネーム0, 0
// ネーム1, 1
// ネーム2, 2
}
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();
}
}
}
}
}




