4

私が理解しているように、ステートメントオブジェクトは、優れたアプリケーションにはあらゆる種類の問題があるため、エンタープライズアプリケーションの開発には使用されません。新しいバージョンでまだ廃止されていないのはなぜですか?

4

4 に答える 4

3

Statement完全に優れたインターフェイスです。悪いのは、文字列、特にユーザー入力を含む文字列を連結してクエリを作成することです。変数を含まない定数クエリのみを発行する場合は、シンプルなStatementインターフェイスが最適です。

于 2013-09-25T18:00:21.197 に答える
2

声明

データベースへの汎用アクセスに使用します。実行時に静的 SQL ステートメントを使用している場合に役立ちます。Statement インターフェイスはパラメーターを受け入れることができません。

JDBC でのステートメントの使用は、BIND 変数を受け入れることができない唯一のステートメント タイプであるため、DDL (ALTER、CREATE、GRANT など) に使用されるように 100% ローカライズする必要があります。

準備済みステートメント

SQL ステートメントを何度も使用する予定がある場合に使用します。PreparedStatement インターフェースは、実行時に入力パラメーターを受け入れます。

PreparedStatements または CallableStatements は、その他すべてのタイプのステートメント (DML、クエリ) に使用する必要があります。これらは、バインド変数を受け入れるステートメント タイプであるためです。

于 2013-09-25T18:23:09.293 に答える
1

JDBC ドライバーは、SQL ステートメントを異なる方法で処理できます。具体的には、Oracle では、PreparedStatement は、:NAME のように見えるすべてのものをバインドしたいと考えています。

これは、:NEW および :OLD の名前を使用して新しい行と古い行を表す Oracle トリガーにとって問題です。

そのため、PreparedStatement を使用して Oracle トリガーを作成しようとすると、:NEW / :OLD の参照に何もバインドされていないため失敗します。

代わりに、通常の Statement.execute() 呼び出しを使用してこれを行う必要があります。

于 2013-09-25T18:41:05.260 に答える
1

また、PreparedStatement は Statement よりも安全です。

Statement を使用していて、ユーザーからの入力を取得してクエリに直接渡す場合は注意してください。

ユーザーは、SQL インジェクションを使用してシステムをハッキングできます。

于 2013-09-25T18:47:49.983 に答える