Statement インタフェースを使用する場合は、データベースに送信するそれぞれの文を解析してアクセス・プランを生成し、文を実行します。実際に実行する前の手順を、文の「準備」と呼びます。
PreparedStatement インタフェースを使用すると、パフォーマンス上有利になります。これによりプレースホルダを使用して文を準備し、文の実行時にプレースホルダへ値を割り当てることができます。
たくさんのローを挿入するときなど、同じ動作を何度も繰り返す場合は、準備文を使用すると特に便利です。
準備文の詳細については、文の準備を参照してください。
次の例では、PreparedStatement インタフェースの使い方を解説しますが、単一のローを挿入するのは、準備文の正しい使い方ではありません。
JDBCExamples クラスの次の InsertDynamic メソッドによって、準備文を実行します。
public static void InsertDynamic( Connection con, String ID, String name ) { try { // Build the INSERT statement // ? is a placeholder character String sqlStr = "INSERT INTO Departments " + "( DepartmentID, DepartmentName ) " + "VALUES ( ? , ? )"; // Prepare the statement PreparedStatement stmt = con.prepareStatement( sqlStr ); // Set some values int idValue = Integer.valueOf( ID ); stmt.setInt( 1, idValue ); stmt.setString( 2, name ); // Execute the statement int iRows = stmt.executeUpdate(); // Print the number of rows inserted System.out.println(iRows + " rows inserted"); } catch (SQLException sqe) { System.out.println("Unexpected exception : " + sqe.toString() + ", sqlstate = " + sqe.getSQLState()); } catch (Exception e) { e.printStackTrace(); } } |
このコード・フラグメントは、samples-dir\SQLAnywhere\JDBC ディレクトリに含まれている JDBCExample クラスの一部です。
executeUpdate メソッドは整数を返します。この整数は、操作の影響を受けるローの番号を表しています。この場合、INSERT が成功すると、値 1 が返されます。
サーバ側のクラスとして実行すると、System.out.println
の出力結果はデータベース・サーバ・メッセージ・ウィンドウに表示されます。
Interactive SQL を使用して、DBA としてサンプル・データベースに接続します。
JDBCExample クラスがインストールされていることを確認します。
Java のサンプル・クラスをインストールする方法の詳細については、サンプルの準備を参照してください。
クラスの JDBCExample.Insert メソッドのラッパとして動作する JDBCInsert という名前のストアド・プロシージャを定義します。
CREATE PROCEDURE JDBCInsert( IN arg1 INTEGER, IN arg2 CHAR(50) ) EXTERNAL NAME 'JDBCExample.Insert(ILjava/lang/String;)V' LANGUAGE JAVA; |
次のように JDBCExample.Insert メソッドを呼び出します。
CALL JDBCInsert( 202, 'Southeastern Sales' ); |
Insert メソッドにより InsertDynamic メソッドが呼び出されます。
ローが Departments テーブルに追加されたことを確認します。
SELECT * FROM Departments; |
サンプル・プログラムでは、Departments テーブルの更新された内容をデータベース・サーバ・メッセージ・ウィンドウに表示します。
DeleteDynamic という名前のサンプル・クラスには、追加されたばかりのローを削除する同じようなメソッドがあります。
クラスの JDBCExample.Delete メソッドのラッパとして動作する JDBCDelete という名前のストアド・プロシージャを定義します。
CREATE PROCEDURE JDBCDelete( in arg1 integer ) EXTERNAL NAME 'JDBCExample.Delete(I)V' LANGUAGE JAVA; |
次のように JDBCExample.Delete メソッドを呼び出します。
CALL JDBCDelete( 202 ); |
Delete メソッドにより DeleteDynamic メソッドが呼び出されます。
ローが Departments テーブルから削除されたことを確認します。
SELECT * FROM Departments; |
サンプル・プログラムでは、Departments テーブルの更新された内容をデータベース・サーバ・メッセージ・ウィンドウに表示します。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |