MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

JDBCのプリペアドステートメントがステートメントよりも速いのはなぜですか?説明?


Statementオブジェクト、特に挿入ステートメントを使用してステートメントを実行している間、クエリが実行されるたびに、ステートメント全体がコンパイルされて何度も実行されます。ここで、これらのステートメントの唯一の違いはステートメントの値です。

一方、プリペアドステートメントはプリコンパイルされたステートメントです。つまり、クエリはコンパイルされ、データベースに格納されます。値の代わりにプレースホルダー(?)が使用され、これらのプレースホルダーへの値は後で提供されます。

したがって、ステートメントの不要なコンパイルと実行を何度も繰り返す必要がありません。

データセットという名前のテーブルがあるとします。 データベース内の列がmobile_brand およびunit_sale 、ステートメントオブジェクトを使用してこのテーブルにレコードを挿入する場合、コードは次のようになります。

stmt.executeUpdate("insert into Dataset values('Iphone', 3000)");
stmt.executeUpdate("insert into Dataset values('Samsung', 4000)");
stmt.executeUpdate("insert into Dataset values('Nokia', 5000)");
stmt.executeUpdate("insert into Dataset values('Vivo', 1500)");
stmt.executeUpdate("insert into Dataset values('Oppo', 9000)");
stmt.executeUpdate("insert into Dataset values('MI', 6400)");
stmt.executeUpdate("insert into Dataset values('MotoG', 4360)");
stmt.executeUpdate("insert into Dataset values('Lenovo', 4100)");
stmt.executeUpdate("insert into Dataset values('RedMi', 4000)");
stmt.executeUpdate("insert into Dataset values('OnePlus', 6334)");

そして、すべての executeUpdate() メソッド呼び出しでは、ステートメント全体がコンパイルおよび実行されます。ここで、ステートメントの値のみが変更され、残りのクエリが不必要にコンパイルされていることを確認した場合。

プリペアドステートメントを使用して挿入クエリを記述し、同じテーブルに同じデータを挿入すると、コードは次のようになります。

PreparedStatement pstmt = con.prepareStatement("insert into Dataset values(?, ?)");

pstmt.setString(1, "Iphone");
pstmt.setInt(2, 3000);
pstmt.executeUpdate();

pstmt.setString(1, "Samsung");
pstmt.setInt(2, 4000);
pstmt.executeUpdate();

pstmt.setString(1, "Nokia");
pstmt.setInt(2, 5000);
pstmt.executeUpdate();

pstmt.setString(1, "Vivo");
pstmt.setInt(2, 1500);
pstmt.executeUpdate();

pstmt.setString(1, "Oppo");
pstmt.setInt(2, 900);
pstmt.executeUpdate();

pstmt.setString(1, "MI");
pstmt.setInt(2, 6400);
pstmt.executeUpdate();

pstmt.setString(1, "MotoG");
pstmt.setInt(2, 4360);
pstmt.executeUpdate();

pstmt.setString(1, "Lenovo");
pstmt.setInt(2, 4100);
pstmt.executeUpdate();

pstmt.setString(1, "RedMi");
pstmt.setInt(2, 4000);
pstmt.executeUpdate();

pstmt.setString(1, "MotoG");
pstmt.setInt(2, 4360);
pstmt.executeUpdate();

pstmt.setString(1, "OnePlus");
pstmt.setInt(2, 6334);
pstmt.executeUpdate();

ここで、挿入クエリがプレースホルダー(?)で準備され、このクエリがコンパイルされてデータベースに格納された後、PreparedStatementインターフェイスのsetterメソッドを使用して値が渡され、ステートメントの不要な実行が回避されることがわかります。


  1. パスフレーズがパスワードや指紋よりも優れている理由

    パスワードとして「password」を設定した日を覚えていますか?多くの人が今でもそのようなめちゃくちゃ安全でない方法を使用していますが、控えめなパスワードでさえ進化しています。 現在、どこに行ってもパスコードまたはパスフレーズを使用しています。彼らはあなたのオンラインバンキング、ゲームアカウント、そしてデバイスのロックを解除します。 しかし、一部の人にとっては、これらでさえ不要になり、おそらく優れた検証手法に置き換えられています。これが、パスコードとパスフレーズを使用する必要がある理由です。 パスコードとは何ですか? 私たちのほとんどは、スマートフォン、メール、その他のアプリやサービス

  2. アップロード速度がダウンロード速度よりもはるかに遅いのはなぜですか?

    インターネットで速度テストを行ったことがある場合は、ダウンロード速度と比較して、アップロード速度が少し哀れなことに気付いたと思います。ただし、あなただけではありません。これは世界中でほぼ標準です。 2018年7月のSpeedtestの世界平均は、46.41 Mbpsダウン、22.48アップでした。なぜ非対称性なのか?一般に、ISPは2つのことを検討しています。1つはアップストリームよりもダウンストリームの帯域幅に対する需要がはるかに多いこと、もう1つは回線が伝送できるトラフィック量に技術的な制限があることです。 非対称性は実際に重要です DSL、ケーブル、ファイバー接続は、ダウンロー