すべてのプロダクト
Search
ドキュメントセンター

PolarDB:準備されたステートメント

最終更新日:May 27, 2024

このトピックでは、準備されたステートメントのプロトコルと、準備されたステートメントのプロトコルによって提供されるサポートについて説明します。 このトピックでは、Javaクライアントで準備されたステートメントプロトコルを有効にする方法についても説明します。

準備されたステートメントプロトコルの概要

準備されたステートメントプロトコルには2つのモードがあります。
  • バイナリモード: このモードは、効率的なクライアント /サーバーのバイナリプロトコルに基づいています。 このモードは、プログラム開発で最も一般的に使用されるモードです。
  • テキストモード: このモードはSQL構文に基づいています。 テキストモードで準備されたステートメントには、PREPARE、EXECUTE、およびDEALLOCATE PREPAREステートメントが含まれます。
PolarDB-Xは2つのモードをサポートしています。 パラメーター値にプレースホルダーを使用する準備されたステートメントには、次の利点があります。
  • ステートメントが実行されるたびにステートメント解析のオーバーヘッドを最小化しました。 ほとんどの場合、データベースアプリケーションは、少数の変数の値のみが異なる多数のほぼ同一のステートメントを処理します。 これらのほぼ同一のステートメントを効率的に実行するには、準備されたステートメントの変数の値を変更するだけで済みます。
  • SQLインジェクション攻撃に対する保護。

バイナリモード

バイナリ準備ステートメントプロトコルは、Java Database Connectivity (JDBC) およびさまざまなプログラミング言語をサポートします。 MySQLでサポートされている準備済みステートメントの詳細については、「準備済みステートメント」をご参照ください。 次のリストは、PolarDB-Xで準備されたステートメントに関する情報を提供します。

  • 準備されたステートメントプロトコルは、次のステートメントをサポートします。
  • 準備されたステートメントプロトコルは、SELECT、UPDATE、DELETE、INSERTなどのすべてのDMLステートメントをサポートします。
  • 準備されたステートメントプロトコルは、DMLステートメントを除いてステートメントをサポートしません。 たとえば、SHOWステートメントとSETステートメントは準備済みステートメントとして使用できません。
Javaクライアントで準備されたステートメントプロトコルを有効にします。
  • Javaクライアントで準備されたステートメントプロトコルを使用する必要がある場合は、useServerPrepStmts=trueパラメーターをURL接続文字列に明示的に追加する必要があります。 このパラメーターを指定しない場合、準備されたステートメントはデフォルトで共通ステートメントとして処理されます。
  • たとえば、次のパラメーターを指定して、Javaクライアントで準備されたステートメントプロトコルを有効にできます。jdbc:mysql:// xxxxxx:3306/xxxxxx? useServerPrepStmts=trueです。

次のコードブロックは、Javaクライアントで準備されたステートメントの例を示します。

Class.forName("com.mysql.jdbc.Driver");
接続接続=DriverManager.getConnection("jdbc:mysql:// xxxxxx:3306/xxxxxx?useServerPrepStmts=true", "xxxxx", "xxxxx");
String sql = "insert into batch values(?,?)";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
preparedStatement.setInt(1, 0);
preparedStatement.setString(2, "polardb-x");
preparedStatement.exe cuteUpdate(); 

テキストモード

PREPAREステートメントを実行して、preparable_stmtのstmt_nameを設定します。 stmt_nameパラメーターの値は大文字と小文字を区別しません。 preparable_stmtは、1つの準備済みステートメントのみです。

preparable_stmtからstmt_nameを準備します。

Executeステートメントを実行して、指定された準備済みステートメントを実行します。 準備されたステートメントにパラメータプレースホルダーが含まれている場合、USING句を使用してユーザー定義変数をパラメータとして指定する必要があります。

EXECUTE stmt_name [USING @ var_name [, @ var_name] ...];
DEALLOCATE PREPAREステートメントを実行して、準備済みのステートメントをリリースします。
DEALLOCATE PREPARE stmt_name;
例:
「SELECT SQRT(POW(? 、2) + POW(? 、2)) AS hypotenuse」からのPREPARE stmt2;
SET @ a = 6;
セット @ b = 8;
EXECUTE stmt2 USING @ a、@ b;
+ -----------
| hypotenuse |
+ -----------
| 10 |
+ -----------

DEALLOCATE PREPARE stmt2;