executeUpdate()によるSQLコマンドの実行

前の例では、 ListEmployees は Statement.executeQuery() メソッドを使用して SELECT ステートメントを実行しました。 executeQuery() はクエリステートメントを実行するように設計されているため、クエリによって返されたデータを含む ResultSet を返します。 Statement クラスは、他の種類のコマンド( UPDATE 、 INSERT 、 DELETE など)を実行するために使用する2番目のメソッドを提供します。行のコレクションを返す代わりに、 executeUpdate() メソッドは実行するSQLコマンドの影響を受ける行の数を返します。

executeUpdate() メソッドのシグネチャは次のとおりです。

int executeUpdate(String sqlStatement)

このメソッドに、実行したいSQLコマンドを含む String 型の単一のパラメーターを提供します。

executeUpdate()を使用してデータを挿入する

次の例は、 executeUpdate() メソッドを使用して emp テーブルに行を追加する方法を示しています。

注:次の例は完全なアプリケーションではなく、メソッドにすぎません。このドキュメントの残りのサンプルには、 Connection の設定と破棄に必要なコードは含まれていません。この例を試すには、サンプルコードを呼び出すクラスを提供する必要があります。

リスト1.3

public void updateEmployee(Connection con)
{
  try
  {
    Console console = System.console();
    Statement stmt  = con.createStatement();

    String empno = console.readLine("Employee Number :");
    String ename = console.readLine("Employee Name   :");
    int rowcount = stmt.executeUpdate("INSERT INTO emp(empno, ename)
      VALUES("+empno+",'"+ename+"')");
    System.out.println("");
    System.out.println("Success - "+rowcount+" rows affected.");
  }
  catch(Exception err)
  {
    System.out.println("An error has occurred.");
    System.out.println("See full details below.");
    err.printStackTrace();
  }
}

updateEmployee() メソッドは、呼び出し元からの単一の引数、AdvancedServerデータベースに接続する必要がある Connection オブジェクトを必要とします。

public void updateEmployee(Connection con)

次に、 updateEmployee() はユーザーに従業員の名前と番号の入力を求めます:

String empno = console.readLine("Employee Number :");
String ename = console.readLine("Employee Name :");

updateEmployee() は console.readline() によって返された値を INSERT ステートメントに連結し、結果を executeUpdate() メソッドに渡します。

int rowcount = stmt.executeUpdate("INSERT INTO emp(empno, ename)
VALUES("+empno+",'"+ename+"')");

たとえば、ユーザーが 6000 という従業員番号と Jones という名前を入力した場合、 executeUpdate() に渡される INSERT ステートメントは次のようになります。

INSERT INTO emp(empno, ename) VALUES(6000, 'Jones');

executeUpdate() メソッドは、SQLステートメントの影響を受ける行の数を返します(通常、 INSERT は1つの行に影響を与えますが、 UPDATE または DELETE ステートメントはさらに影響を与えます)。エラーをスローせずに executeUpdate() が返された場合、 System.out.println を呼び出すと、影響を受けた行の数を示すメッセージがユーザーに表示されます。

System.out.println("");
System.out.println("Success - "+rowcount+" rows affected.");

プログラムが例外を検出した場合、catchブロックは適切なエラーメッセージをユーザーに表示します。

{
System.out.println("An error has occurred.");
System.out.println("See full details below.");
err.printStackTrace();
}

executeUpdate()の構文例

You can use executeUpdate() with any SQL command that does not return a result set. Some simple syntax examples using executeUpdate() with SQL commands follow:

executeUpdate() で UPDATE コマンドを使用して行を更新するには:

stmt.executeUpdate("UPDATE emp SET ename='"+ename+"' WHERE empno="+empno);

DELETE コマンドと executeUpdate() を使用してテーブルから行を削除するには:

stmt.executeUpdate("DELETE FROM emp WHERE empno="+empno);

executeUpdate()でDROPTABLEコマンドを使用して、データベースからテーブルを削除するには:

stmt.executeUpdate("DROP TABLE tablename");

CREATE TABLE コマンドと executeUpdate() を使用して、新しいテーブルをデータベースに追加するには:

stmt.executeUpdate("CREATE TABLE tablename (fieldname NUMBER(4,2),
fieldname2 VARCHAR2(30))");

テーブルの属性を変更するために ALTER TABLE コマンドと executeUpdate() を使用するには:

stmt.executeUpdate("ALTER TABLE tablename ADD COLUMN colname BOOLEAN");