LoginSignup
8
7

More than 5 years have passed since last update.

リテラルSQLとバインド変数化とJava

Posted at

SQL

最近ではフレームワークの発展により性能を意識したSQLを書くことは少なくなりました。
たまに性能がでない時に思い出すのはリテラルバインド変数化です。

SQLにはリテラルバインド変数化というものがあります。
リテラルハードパースであるため、重い処理となります。
バインド変数化ソフトパースであるため、軽い処理となります。

ハードパース

構文解析して構文エラーがないかどうかをチェックするとともに、テーブル名と列名が正確であるかどうかをチェックし、SQL 文を最適化して最善の実行計画を見つけます

ソフトパース

SQL 文が共有プールにすでに存在していることから、アクセス権限やセッション検証のためのわずかな処理で完了します

リテラルSQL

以下、SQLにはWHERE句に1000というリテラルが含まれます。

SELECT * FROM table WHERE no = 1000; 
バインド変数化

以下は先程のSQLをバインド変数化した例となります

variable no=1000;
SELECT * FROM table WHERE no = :no;

Javaで書くと以下の構文になります。

PreparedStatement pstmt = 
    conn.prepareStatement(“SELECT * FROM table WHERE no = ?”);
pstmt.setInt(1, 1000);
8
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
7