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");