Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (日本語) » SQL Anywhere サーバ - プログラミング » SQL Anywhere データ・アクセス API » SQL Anywhere JDBC ドライバ » JDBC を使用したデータへのアクセス

 

より効率的なアクセスのために準備文を使用する

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 の出力結果はデータベース・サーバ・メッセージ・ウィンドウに表示されます。

♦  JDBC Insert のサンプルを実行するには、次の手順に従います。
  1. Interactive SQL を使用して、DBA としてサンプル・データベースに接続します。

  2. JDBCExample クラスがインストールされていることを確認します。

    Java のサンプル・クラスをインストールする方法の詳細については、サンプルの準備を参照してください。

  3. クラスの JDBCExample.Insert メソッドのラッパとして動作する JDBCInsert という名前のストアド・プロシージャを定義します。

    CREATE PROCEDURE JDBCInsert( IN arg1 INTEGER, IN arg2 CHAR(50) )
      EXTERNAL NAME 'JDBCExample.Insert(ILjava/lang/String;)V'
      LANGUAGE JAVA;
  4. 次のように JDBCExample.Insert メソッドを呼び出します。

    CALL JDBCInsert( 202, 'Southeastern Sales' );

    Insert メソッドにより InsertDynamic メソッドが呼び出されます。

  5. ローが Departments テーブルに追加されたことを確認します。

    SELECT * FROM Departments;

    サンプル・プログラムでは、Departments テーブルの更新された内容をデータベース・サーバ・メッセージ・ウィンドウに表示します。

  6. DeleteDynamic という名前のサンプル・クラスには、追加されたばかりのローを削除する同じようなメソッドがあります。

    クラスの JDBCExample.Delete メソッドのラッパとして動作する JDBCDelete という名前のストアド・プロシージャを定義します。

    CREATE PROCEDURE JDBCDelete( in arg1 integer )
      EXTERNAL NAME 'JDBCExample.Delete(I)V'
      LANGUAGE JAVA;
  7. 次のように JDBCExample.Delete メソッドを呼び出します。

    CALL JDBCDelete( 202 );

    Delete メソッドにより DeleteDynamic メソッドが呼び出されます。

  8. ローが Departments テーブルから削除されたことを確認します。

    SELECT * FROM Departments;

    サンプル・プログラムでは、Departments テーブルの更新された内容をデータベース・サーバ・メッセージ・ウィンドウに表示します。