0

クエリに WHERE 句がない場合は、Statement または PreparedStatement を使用する必要があります。どちらが効率的でしょう。

例えば、

SELECT ID, NAME FROM PERSON
4

3 に答える 3

1

準備済みステートメントは、効率を高めるためにプリコンパイルされます。また、データベースは、後の実行でパフォーマンスを向上させるステートメントをキャッシュします。ステートメントに変数がない場合でも、どちらも使用できます。特にステートメントが頻繁に実行される場合。

1回またはほとんど実行されない場合、通常は問題ないと思いますStatement。それ以外の場合は、を使用しPreparedStatementます。しかし、ベンチマークせずにそれについて確信する方法はありません。

于 2013-09-09T15:52:54.890 に答える
1

JDBC ドライバーの実装に依存します。java.sql.Statement一部のベンダーは、 がまたはのインスタンスであるかどうかに関係なく、そのステートメントをキャッシュに保存しますjava.sql.PreparedStatement。簡単にするために、 を使用できますjava.sql.Statement。一方、パラメータを追加してステートメントを数回 (同じ接続で) 実行する場合は、 のインスタンスを使用しますjava.sql.PreparedStatement

Javadoc for にjava.sql.PreparedStatementは次のように書かれています:

このオブジェクトを使用して、このステートメントを複数回効率的に実行できます。

于 2013-09-09T15:59:36.987 に答える
0

stonedsquirrel が言及したこととは別に、where 条件を追加したい場合は、変更が簡単で、コードに以下を追加する必要がある場合は、別のポイントがあります。

PreparedStatement ps = con.prepareStatement("SELECT ID, NAME FROM PERSON WHERE NAME= ?"); 
ps.setString(1, getName(""));
....
...

ただし、 を使用している場合はStatement、コードをさらに変更する必要があります。

したがって、PreparedStatementwhere 条件を追加する必要がある場合は、使用することで最小限の変更を行うことができます。

逆に、 を使用するStatementと、SQL クエリをログに記録したり印刷したりするのは非常に簡単です PreparedStatementが、 を使用すると、SQL ステートメントをログに記録したり印刷したりするのは非常に困難であるか、直接的な方法はありません。

于 2013-09-09T16:39:35.587 に答える