()の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()メソッドは、呼び出し元からの1つの引数、Advanced Serverデータベースに接続する必要がある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()構文例

executeUpdate()は、結果セットを返さないSQLコマンドで使用できます。 SQLコマンドでexecuteUpdate()を使用するいくつかの簡単な構文例を次に示します。

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

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

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

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

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

 stmt . executeUpdate ( "DROP TABLE tablename" );

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

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

executeUpdate()でALTER TABLEコマンドを使用して、テーブルの属性を変更するには:

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