PreparedStatement と Statement について教えてください。
PreparedStatement は、
「実行環境にもよるが、Statement より、処理速度が40%~50%ほど短縮される」という記述があったのですが、その逆のケースはありませんでしょうか?
[参考URL]
http://el.itlab-school.jp/index.cgi/javamysql
Statement の処理が、
PreparedStatement より、早くなる、そんな状況はないでしょうか?
また、Statementより、
PreparedStatement方が、基本的にはの方が処理が早いという特徴から、気になるところがあるのですが
実際のWebアプリケーションを作成のときは、
レスポンス速度も考慮し「PreparedStatementにてSQL文を発行するべきでしょうか?」(例え、"?"を使用することがなかったとしても)
PreparedStatementを使用せずに、
Statementを使用した方がいい場合、という状況はあるのでしょうか?
No.1ベストアンサー
- 回答日時:
PreparedStatement を使用しても、速度が改善される場合はあまりありません。
ほとんどの場合、Statement と、PreparedStatement は、同じ位の速度です。
場合によっては、PreparedStatement の方が、画期的に速い場合もあります。
●Statement が有効な場合
Statement を使用する時の多くは、例えば、固定の SQL 文字列を DAO から
実行する時。には、Statement を使用する事もあります。
Statement を使用して、固定の SQL 文を短い時間に、複数回実行した場合、RDBMS 内で、SQL 実行計画をリサイクルしてくれるかもしれないと期待できます。
また、PreparedStatement では処理しきれないような複雑な SQL 文を動的に生成しているような場合。
同じ SQL が短い時間内に生成される可能性が低く、加えて、SQL 文が複雑な場合、PreparedStatement が有効に活用できないでしょう。
この場合、SQL インジェクション対策はPreparedStatementを使用する場合と同じではないと思いますので、注意が必要かと思います。
●PreparedStatement が有効な場合
同じ SQL で ? の部分のみ入れ替えて、PreparedStatement のインスタンスを連続して使用する場合。
連続して、同じ PreparedStatement を実行した場合、処理速度が速くなる事が期待できます。
SQL インジェクション対策をする場合。
SQL インジェクション対策をする場合、Statement を使用するよりも、PreparedStatement を使用する方が容易であると思われます。
この回答への補足
すみません
「プリペアードステートメントを使いすぎている」という状況なのでしょうか?×
「“?”を使いすぎている」という状況なのでしょうか? ○
です。
どうもありがとうございます。
お礼がおそくなって申し訳ありません。
「PreparedStatement」が早くなるものだと思っていたのですが、
Statement と、PreparedStatement は、同じ位の速度って余り違いがないものだったのですね^^;
>PreparedStatement では処理しきれないような複雑な SQL 文を動的に生成しているような場合
すみません、理解が及ばすにイメージができなかったのですが、
「PreparedStatement では処理しきれないような複雑な SQL 文を動的に生成しているような場合」というのはどのような状態なのでしょうか?
「プリペアードステートメントを使いすぎている」という状況なのでしょうか?
SQLインジェクションについては
まだ余り理解できていないので調べてみます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP クエリObjectをforeachで回す時に、次のレコードへ移動せずに次のレコードを取得したい 2 2022/07/28 15:29
- PHP 【PHP/MySQL】コード上で生成したクエリを基に集計クエリを作りたい 1 2022/07/28 15:06
- 政治 日本共産党は女性天皇を認めよ言うてます。従って女性天皇を支持する日本人は日本共産党員ですか? 4 2023/03/03 08:08
- その他(プログラミング・Web制作) プログラミング 処理速度 1 2022/11/25 11:05
- 環境・エネルギー資源 ALPS処理水の問題を教えて。冷却水への再利用は? 3 2023/07/06 21:40
- その他(プログラミング・Web制作) python pandas 行ごとに列名(列番号)を指定して抽出したい 1 2023/05/26 13:47
- その他(SNS・コミュニケーションサービス) 【至急】Microsoft teamsログインできないループ・・ 3 2023/05/17 13:17
- 大学・短大 大学一年生です レポートについて質問します レポートを制作しているのですが 教科書から全てを引用した 1 2023/06/02 03:21
- PostgreSQL DBFluteについて質問です。 環境:PostgreSQL java8 前提:webアプリケーショ 1 2022/07/07 00:49
- JavaScript Typescript が必要な理由 1 2023/01/07 11:45
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
eclipse実行ができない
-
Eclipse(JAVA)のデバッグで他...
-
eclipseでスタックサイズを変更...
-
split関数で区切り文字がない場合
-
JAVAにのeclipseに関する質問で...
-
javacでStackOverflowError
-
jasper.exceptionとは?
-
環境変数設定で
-
Javascriptのパーミッション
-
eclipseのjavaを実行できない
-
javaからVBAを実行する方法を教...
-
Javaで年月の取得(YYYYMM形式で)
-
「ワークスペースをビルド中」...
-
java ○○といつもどおり入力する...
-
エクセルマクロ2003から2007で
-
Javaの計算結果がおかしい
-
Javascriptの値をJava(JSP)へ渡...
-
コミット前の更新データをチェ...
-
Eclipseで実行できてコマンドプ...
-
JAVAで作ったプログラムを通常...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
split関数で区切り文字がない場合
-
JAVAにのeclipseに関する質問で...
-
Eclipse(JAVA)のデバッグで他...
-
「ワークスペースをビルド中」...
-
Javascriptの値をJava(JSP)へ渡...
-
eclipseでスタックサイズを変更...
-
コミット前の更新データをチェ...
-
Javaで年月の取得(YYYYMM形式で)
-
Eclipseで実行>Javaアプリケー...
-
eclipseのjavaを実行できない
-
jasper.exceptionとは?
-
eclipse実行ができない
-
Eclipse 実行→Javaアプリケー...
-
環境変数設定で
-
バイナリーコードと、ソースコ...
-
javaからVBAを実行する方法を教...
-
Javaについての質問です。 コン...
-
Worksheet_Changeが動かない
-
エクリプスで実行時、最新クラ...
-
Javascriptのパーミッション
おすすめ情報