クエリに WHERE 句がない場合は、Statement または PreparedStatement を使用する必要があります。どちらが効率的でしょう。
例えば、
SELECT ID, NAME FROM PERSON
クエリに WHERE 句がない場合は、Statement または PreparedStatement を使用する必要があります。どちらが効率的でしょう。
例えば、
SELECT ID, NAME FROM PERSON
準備済みステートメントは、効率を高めるためにプリコンパイルされます。また、データベースは、後の実行でパフォーマンスを向上させるステートメントをキャッシュします。ステートメントに変数がない場合でも、どちらも使用できます。特にステートメントが頻繁に実行される場合。
1回またはほとんど実行されない場合、通常は問題ないと思いますStatement
。それ以外の場合は、を使用しPreparedStatement
ます。しかし、ベンチマークせずにそれについて確信する方法はありません。
JDBC ドライバーの実装に依存します。java.sql.Statement
一部のベンダーは、 がまたはのインスタンスであるかどうかに関係なく、そのステートメントをキャッシュに保存しますjava.sql.PreparedStatement
。簡単にするために、 を使用できますjava.sql.Statement
。一方、パラメータを追加してステートメントを数回 (同じ接続で) 実行する場合は、 のインスタンスを使用しますjava.sql.PreparedStatement
。
Javadoc for にjava.sql.PreparedStatement
は次のように書かれています:
このオブジェクトを使用して、このステートメントを複数回効率的に実行できます。
stonedsquirrel が言及したこととは別に、where 条件を追加したい場合は、変更が簡単で、コードに以下を追加する必要がある場合は、別のポイントがあります。
PreparedStatement ps = con.prepareStatement("SELECT ID, NAME FROM PERSON WHERE NAME= ?");
ps.setString(1, getName(""));
....
...
ただし、 を使用している場合はStatement
、コードをさらに変更する必要があります。
したがって、PreparedStatement
where 条件を追加する必要がある場合は、使用することで最小限の変更を行うことができます。
逆に、 を使用するStatement
と、SQL クエリをログに記録したり印刷したりするのは非常に簡単です
PreparedStatement
が、 を使用すると、SQL ステートメントをログに記録したり印刷したりするのは非常に困難であるか、直接的な方法はありません。