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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
eclipseでスタックサイズを変更...
-
Eclipse(JAVA)のデバッグで他...
-
JAVAにのeclipseに関する質問で...
-
Google Colabでimport soxが出...
-
コミット前の更新データをチェ...
-
split関数で区切り文字がない場合
-
java 外部プログラムの実行
-
「ワークスペースをビルド中」...
-
Javascriptの値をJava(JSP)へ渡...
-
環境変数設定で
-
eclipseのjavaを実行できない
-
NoClassDefFoundError: javax/m...
-
JAVA(またはTOMCAT)でのスケ...
-
[JAVA]evalで文字列を計算式に!
-
バイナリーコードと、ソースコ...
-
JPQLとSQLの結果…。
-
コマンドライン引数の掛け算の...
-
javascriptで、style undefined...
-
Eclipseから実行すると画像が読...
-
Javaで年月の取得(YYYYMM形式で)
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
split関数で区切り文字がない場合
-
Javascriptの値をJava(JSP)へ渡...
-
eclipseでスタックサイズを変更...
-
「ワークスペースをビルド中」...
-
Javaで年月の取得(YYYYMM形式で)
-
jdbcでinsert,delete,createをe...
-
JAVAにのeclipseに関する質問で...
-
Eclipse(JAVA)のデバッグで他...
-
環境変数設定で
-
コミット前の更新データをチェ...
-
eclipseのjavaを実行できない
-
jasper.exceptionとは?
-
Worksheet_Changeが動かない
-
javascriptで、style undefined...
-
Eclipseで実行>Javaアプリケー...
-
エクリプスで実行時、最新クラ...
-
NoClassDefFoundError: javax/m...
-
Javascriptのパーミッション
-
eclipseで「サーバーで実行」表...
-
Eclipseで実行できてコマンドプ...
おすすめ情報