PreparedStatementとStatementの違いを知っていますか?

3992 ワード

一、データベースに接続するには
1つ目:(1)ロードドライバ:Class.forName(“com.mysql.jdbc.Driver”); (2)接続の取得:Connection connection=DriverManagement.getConnection( “jdbc:mysql://localhost:3306/データベース名?useSSL=false、root、データベースパスワード);(3)処理対象の作成:Statement statement=connection.createStatement(); (4)sql文の作成:String sql;(5)sql文:statementを実行する.executeQuery(sql);//検索するexecuteUpdate(sql);//追加、削除、変更(6)処理対象を閉じる:statement.close(); (7)接続を閉じる:connection.close();
2つ目:(1)データソースを作成する
DataSource  dataSource = new MysqlDataSource();
MysqlDataSource tmpDataSource = (MysqlDataSource) dataSource;   
tmpDataSource.setURL("jdbc:mysql://127.0.0.1:3306/java_image_server?characterEncoding=utf8&useSSL=true");
tmpDataSource.setUser(“root");
tmpDataSource.setPassword("123");
return dataSource;

(2)接続取得:接続接続=dataSource.getConnection() ; (3)sql文の作成:String sql;(4)オブジェクトの作成:PreparedStatement statement=connection.prepareStatement( sql ); (5)sql文:statementを実行する.executeQuery();//検索するexecuteUpdate();//追加、削除、変更(5)処理対象を閉じる:statement.close(); (6)接続を閉じる:connection.close();
二、区別
1.PreparedStatementはjavaです.sqlパッケージの下のインタフェースでconnectionを呼び出す.preparedStatement(sql)メソッドは、PreparedStatementオブジェクトを得ることができます.データベースシステムはsql文をプリコンパイルし(JDBCドライバがサポートしている場合)、その後コンパイルしません.前処理文は事前にコンパイルされ、この事前コンパイルされたsqlクエリ文は将来のクエリで再利用できます.これにより、Statementオブジェクトが生成するクエリよりも高速になります.
2.Statementを使用するかPreparedStatementオブジェクトJDBCを使用するかの最適化は、どのような機能を使用するかに基づいている.PreparedStatementを選択するかStatementを選択するかは、それらをどのように使用するかによって異なります.一度だけ実行するSQL文に対してStatementを選択することが望ましい.逆に、SQL文が複数回実行する場合には、PreparedStatementを選択することが望ましい.
3.PreparedStatementオブジェクトはsql注入を防ぐことができ、Statementはsql注入を防ぐことができません.
SQL注入とは何ですか?SQL注入とは、Webアプリケーションがユーザーの入力データの正当性を判断していないか、フィルタリングが厳しくないことを意味し、攻撃者はWebアプリケーションで事前に定義したクエリー文の最後に追加のSQL文を追加し、管理者が知らないうちに不正な操作を実現し、データベースサーバをだまして不正なクエリーを実行することを実現する.これにより、対応するデータ情報がさらに得られる.
4.PreparedStatementはStatementから継承されます.どちらもインタフェースの違いです.PreparedStatementはプレースホルダを使用できます.プリコンパイルされています.バッチはStatementより効率的です.
5.Statementは、パラメータなしの単純なSQL文を実行し、生成された結果のオブジェクトを返します.SQL文を実行するたびに、データベースはsql文をコンパイルします.PreparedStatementパラメータ付きプリコンパイルを実行するSQL文
三、まとめ
PreparedStatementインタフェースについては、次の点に注意してください.
  • PreparedStatementは、Statementよりも優れたパフォーマンスを得るためにパラメトリッククエリを書くことができます.
  • PreparedStatementの場合、データベースは、通常のクエリよりも高速に実行される前処理文クエリを使用してコンパイルおよび定義された実行計画を使用できます.
  • PreparedStatementは、一般的なSQL注入攻撃(セキュリティが良い)
  • を阻止することができます.
  • PreparedStatement動的クエリ文
  • を書くことができます.
  • PreparedStatementとjava.sql.Connectionオブジェクトは関連付けられており、connectionを閉じるとPreparedStatementも使用できません.
  • “?” プレースホルダといいます.
  • プレースホルダのインデックス位置は0ではなく1から始まり、0を入力とjavaになります.sql.SQLException invalid column index異常.
  • 効率が高い:PreparedStatementを使用してSQLコマンドを実行する場合、コマンドはデータベースによってコンパイルされ、解析され、コマンドバッファに配置される.以降、同じPreparedStatementオブジェクトを実行するたびに、プリコンパイルされたコマンドは
  • を繰り返し使用できます.
  • コードの可読性とメンテナンス性が良い