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

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

最終更新日:May 28, 2024

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

概要

分散型リレーショナルデータベースサービス (PolarDB-X 1.0) を使用すると、クライアント /サーバーのバイナリプロトコルを有効にして、サーバー側で準備されたステートメントを実行できます。 パラメーター値のプレースホルダーを持つ準備されたステートメントには、次の利点があります。
  • ステートメントが実行されるたびにステートメント解析のオーバーヘッドを最小限に抑えました。 ほとんどの場合、データベースアプリケーションは、少数の変数値のみが異なる多数のほぼ同一のステートメントを処理します。 これらのほぼ同一のステートメントを効率的に実行するには、準備されたステートメントの変数値を変更するだけで済みます。
  • SQLインジェクション攻撃に対する保護。

説明

  • 準備されたステートメントプロトコルの基本情報
  • SELECT、UPDATE、DELETE、INSERTなど、すべてのSQL DMLステートメントを準備済みのステートメントとして使用できます。
  • 非DML SQL文は、SHOW文やSET文などの準備済み文として使用することはできません。
  • MySQL CLIで準備済みのステートメントとして次のステートメントを使用することはできません:
    mysql> SET @ s = 'SELECT SQRT(POW(?,2) + POW(?,2)) as hypotenuse ';
    mysql> PREPARE stmt2から @ s;
    mysql> SET @ a = 6;
    mysql> SET @ b = 8;
    mysql> EXECUTE stmt2 USING @ a、@ b; 

Javaクライアントで準備されたステートメントプロトコルを有効にする

  • Javaクライアントで準備されたステートメントを実行する場合は、MySQLに接続するためのURLにuseServerPrepStmts=trueフィールドを強制的に追加します。 このフィールドを追加しない場合は、通常のクエリが実行されます。
  • 例: 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, "corona-db");
preparedStatement.exe cuteUpdate();