Javaデータベース接続-JDBC(JDBCは、JDBCの制御トランザクション、C3P0接続プールを詳細、ドルイド接続プール、春JDBC-JDBCテンプレート)

Javaデータベース接続-JDBC(JDBCは、JDBCの制御トランザクション、C3P0接続プールを詳細、ドルイド接続プール、春JDBC-JDBCテンプレート)

<<<<< CSDNのレイアウトや表示画像は少し問題を抱えているので、フルに美しく見えるのJava Database Connectivityの-JDBC(JDBC詳細、JDBC制御トランザクション、C3P0接続プール、ドルイド接続プール、春JDBC-JDBCテンプレート) >>> >>

1、JDBC

①JDBCコンセプトと自然

JDBC(Javaデータベース接続、Javaデータベース接続性)は、使用されたSQL文を実行するためのJava APIであるJavaクラスとインタフェースで書かれたセットで構成され、複数のリレーショナル・データベースへの統一されたアクセスを提供することができます。JDBCは、データベース・アプリケーションを作成するためにデータベース開発者を可能にする、より高度なツールやインタフェースを構築することを可能にするベンチマークを提供します。
JDBCは、実際にはすべてのリレーショナルデータベースを操作するのセット、すなわちインタフェースで定義された公式ルール(日・カンパニー)の本質です。各データベースベンダーは、データベースドライバのjarパッケージを提供するために、この言い訳を達成するために、我々はインターフェイスのこのセットを使用することができます(JDBC)プログラミングは、コードの実行は、実際のドライバのjarパッケージの実装クラスです。

②ダウンロード

方法1:入力https://dev.mysql.com/downloads/connector/j/を、プラットフォームに依存しないを選択した後、ダウンロードにクリックし、対応するバージョンを選択するか、https://mvnrepository.com/にもダウンロードすることができます
方法は: MySQLの公式サイトへ>>> [ダウンロード]をクリックします>>>コミュニティをクリック>>> MySQLのコネクタをクリック>>>コネクタ/ Jをクリック>>>プラットフォームに依存しないを選択>>>それをダウンロード

MySQLのConnector / Jの8.0クラス名の前のバージョンははcom.mysql.jdbc.Driverです
com.mysql.cj.jdbc.Driverに変更のMySQLのConnector / J 8.0開始クラス名

(ちょうど約JDBCの初めてのエントリを得るために、実施例を以下)を使用③予備試験

手順:
1.インポートドライバのjarパッケージ
のlibモジュールの新しい、新しいディレクトリの後に新規プロジェクトのIntelliJ IDEAのModule1で、「MySQLのコネクタ-のjava-5.1.37への二次 -bin.jar」 にコピーされ、その後、追加ライブラリとして右右のlibディレクトリ
2.登録がドライブ
に新しいパッケージを、その後、新しいクラスを作成し、次のコードは、main関数で書かれている:
Class.forNameの(「はcom.mysql.jdbc.Driver」);
より多くのコードは、ドライバを登録し、注異常に対処するために、その
3 Accessデータベース接続オブジェクト接続
接続接続たDriverManager.getConnection =(「JDBC:MySQLの:// localhostを:3306 / HH」、「ルート」、「ルート」);
上記のコード、HHデータベース名、 MySQLのログインアカウントの最初のルート、MySQLのrootログインアカウントのパスワードための第二
4. SQL定義する
文字列のSQL =「UPDATEの従業員をSET達成= 100」;
上記のコードは、私のコンピュータは、hhデータベースのIだろう従業員変更されたフィールドの達成100
5文にSQL文を実行するオブジェクトを取得
声明をConnection.createStatement =();
6. SQL実行、リターンを受け取ります フルーツ
Statement.executeUpdate I = INT(SQL);
7.処理結果
のSystem.out.println(I);
8.リリースリソース
Statement.close();
Connection.close();
9.結果
データベースのデータは、正常に変更
完全なコードは、以下図:

④JDBC各クラスには、詳細な

DriverManagerの-JDBCドライバ・マネージャ・オブジェクトは、
機能
1、登録ドライバ:データベースドライバジャー用いてプログラム伝える
のDriverManager所与ドライバに登録する静的な無効なregisterDriver(ドライバドライバ)
にClass.forName(「はcom.mysql.jdbc.Driver」)を;
はcom.mysql.jdbc.Driverソースのコードの次の段落の静的ブロックで見ることができます:
静的{
試み{
にDriverManager.registerDriver(新新ドライバー());
}キャッチ(のSQLException VAR1){
スローのRuntimeException新新(「できるわけではありません登録!ドライバ「);
}
}
注:Class.forNameの(省略することができますので、自動的に、あなたが運転するのに役立ちますMETA-INF /サービス/に、java.sql.driverコードレジスタ後のMySQL5ドライブジャーパッケージ」com.mysqlを。 jdbc.Driver「)
2、データベース接続
の静的接続のgetConnection(文字列のURL、文字列のユーザー、文字列のパスワード) 指定されたデータベースのURLへの接続を確立しよう
URL:URLデータベース(構文ます。jdbc:mysqlの:// IPアドレスまたはドメイン名:ポート番号/データベースの名前)の接続は、ローカルのMySQLサーバがあり、ポートが3306の場合は、URLを短縮することができます。jdbc:mysqlの:///データベース名
接続-データベース接続オブジェクト
関数
1は、オブジェクトは、SQL実行得るために
()ステートメントのcreateStatementするSQL文をデータベースに送信するためのステートメントオブジェクトを作成し
たPreparedStatementのprepareStatement(文字列のSQL)パラメータ付きSQL文をデータベースに送るためのPreparedStatementオブジェクトを作成
2、管理トランザクション
無効にsetAutoCommit(boolean型はautoCommit)はautoCommit:オープン取引 - 自動コミットモードを有効にする場合はtrue;モードを無効に自動コミットをfalseが
トランザクションをコミットします。voidは(コミット)前回のコミット/ロールバックの変更は永続的な変更となっているため、すべての可能このConnectionオブジェクトを解放現在保持するデータベースロック
ロールバックトランザクションを:無効ロールバック()現在のすべてのトランザクションで行われた変更とリリースこのConnectionオブジェクトが現在保持するデータベースロック解除する
静的SQL文とリターンを実行し、文をそれは その結果生成されたオブジェクト
の実行方法SQLは、
(文字列のSQL)を実行していない最初の結果がResultSetオブジェクト、真リターンである場合、結果の複数を返すことができる指定されたSQL文を実行BOOLEAN、そのカウントが更新またはNOであればあります結果は、falseが返されます
int型のexecuteUpdate(文字列のSQL)DML文のSQL文(INSERT、UPDATE、またはDELETE)を実行して、任意のSQLステートメント(DDL文)が返さない
SQLデータ操作言語(DML)文の(1)、リターンラインDDL文のように(2)カウント、リターン0(戻り値ベースのDML文が正常に実行され、戻り値> 0成功した)
指定されたSQL文のResultSetののexecuteQuery(文字列SQL)の実行、通常は静的DQL(単一のResultSetオブジェクトを返すSELECT)ステートメント

次のように改良された外観、コード「を用いて初期試験③」の一例です。

次のようにプロジェクトの図面や実行結果は次のとおりです。

ResultSet-結果セットオブジェクト、クエリパッケージの結果を
ブール次の():次の行方向に現在位置からカーソルを移動し、新しい現在の行が有効な場合、trueを返し、次の行が存在しない場合、偽を返します。取得データのwhileループ
のgetXXX(INT columnIndexに):(各データ・タイプを表す列XXX)各列の結果を取得し、列の番号を取得するパラメータ代表受信方法はint型であり、列番号は、左から右へでありますカウント開始
のgetXXX(文字列columnLabelが):(列XXXは、各データ・タイプを表す)、各列の結果を取得し、この方法は、String型のパラメータとして受け取り、データベース内の名前列表す
上記二つの方法のgetXXX INTパラメータまたはパラメータの文字列を使用して同じ効果を得ることができ
、例えば、図クエリの例:

クエリの結果は以下の通りであります:

SQL文でPreparedStatement-プリコンパイルされたオブジェクト
SQLインジェクション:Webフォームに挿入されたSQLコマンドにより提出またはドメイン名またはページリクエストクエリ文字列を入力して、最終的には悪質なSQLを実行するサーバーを欺くためにコマンド
の使用であるANDとOR:などバックスクリプトの論理エラーを生じた演算のルール、
そして私は「XXX」または「」=使用 「」 ユーザ名とパスワードを行うには、クエリは次のようになります。
SELECT * adminbateユーザー=「xxxは」ANDパスワード= FROM 「XXX」OR「」= 「」>>> 条件が真になる
上記SQLインジェクションの問題は、プリコンパイルされたSQLを使用して、PreparedStatementオブジェクトによって解決することができ、むしろプレースホルダとしてより即ちパラメータ?スプライシングによって
SQL文オブジェクトの取得により、異なるで書かれた上記の例
PreparedStatementオブジェクトの接続方法のPreparedStatementのprepareStatement(文字列のSQL)を作成するにはパラメータ付きSQL文をデータベースに送信された
空隙のsetXXX(INT parameterIndex、xxxはxはする ) 指定します指定された入力ストリームのパラメータ。xxxはタイプを表す;?示しparameterIndex位置、1からカウントを;?Xは、パラメータの値を表す
のPreparedStatementは、通常のステッチ列のSQLの結果を避けるために、パラメータに割り当てられた文を実行する前に、SQLの後に通過することができます声明は、あなたの脱出を与えるプラス、スラッシュが追加されます単一引用符として準備して2で完成されているSQL SQL文を実行するだけでなく、刑の執行の効率性を向上させるセキュリティ上の問題をもたらした、と。上記のSQL文の実行には、データベース内にあるので、
ユーザー= 'adminbate SELECT * FROM XXX' ANDパスワード= '' XXX 'OR' '=' ''
開発は、1以来、PreparedStatementのCRUD操作を使用して行う2安全で、効率的です

⑤JDBCの制御トランザクション

トランザクションデータベース(略称:トランザクション)は、論理ユニットの実行中は、データベース管理システムであり、動作は有限の配列データベースから成り、複数のステップを同時に一緒に実行成功または同時に失敗のいずれかの
接続管理オブジェクトの操作を
開始トランザクション無効にsetAutoCommit(boolean型はautoCommit)与えられた状態自動コミットにこの自動コミットモードに接続されている-自動コミットモードを有効にするにはtrue;無効に自動コミットモード(SQL文を実行する前にトランザクションを開始します)に虚偽の
2は、トランザクションをコミットボイド()前回以降に行われたすべての変更を行いコミットし、現在(すべてのトランザクションは、SQLトランザクションを実行して提出されている)このConnectionオブジェクトが保持するデータベースロック/ロールバック恒久的にコミットし、リリース
バックトランザクションを3、ロール空ロールバック()(あなたがキャッチでトランザクションをロールバックすることができます)現在のトランザクションで行われたすべての変更を取り消し、現在このConnectionオブジェクトが保持するデータベース・ロックを解放するために
JDBCトランザクションの場合(コアコード):

キャッチされた例外は、何らかの異常が発生した場合に、トランザクション・ロールバックを持っていたとして、図例外ではそのような例として、比較的大きな範囲を、捕獲しようとすると、

⑥データベース接続プール

データベース接続プール
データベース接続プールは、アプリケーションが再作成ではなく、既存のデータベース接続を再利用することができます配信、管理、およびデータベース接続の解放のために責任がある、何のリリースがありませんので、避けるために、最大アイドル時間よりも多くのデータベース接続がアイドル状態を解除しますデータベース接続は、データベース接続の脱落を引き起こしました。この技術は、大幅にデータベース操作のパフォーマンスを向上させることができます。
インタフェースjavax.sqlでデータソース(注下部のjavaxパッケージ; DataSourceインタフェースは、ドライバベンダーによって実装されている)は
、接続を取得する
接続のgetConnection()この接続によって表されるデータソースDataSourceオブジェクトを確立しようとします。戻り値:データソースへの接続は
、接続を返すように
接続オブジェクトの接続は、接続プールから取得する場合Connection.close(呼び出して、)メソッドは、接続を閉じますが、接続プールに返さないであろう

C3P0:

C3P0はオープンソースJDBC接続プールその実装JNDIデータソースとバインディング、サポートJDBC3の規範や基準JDBC2の拡張機能です。これは、現在、その上のオープンソースプロジェクトにHibernate、Springとを使用しています。
ダウンロード:
1は、入力https://www.mchange.com/projects/c3p0/ C3P0公式ウェブサイト(または直接にhttps://mvnrepository.com/のMavenリポジトリに対応したバージョンをダウンロードすることができます選択)
にC3P0のサイト」2.クリックをSourceForgeの"
3、上のバージョンのクリックを選択し、"ダウンロード」
の使用:
1、インポートc3p0-0.9.5.2-sources.jarとmchange-コモンズ-のjava-0.2.11- sources.jar 2つのJARパッケージは、(もちろん、輸入のmysqlに覚えていますJavaの-XXXX ---コネクタbin.jarを)
2、直接ページがある先のsrcディレクトリ内のファイルに、プロファイル名のc3p0.propertiesまたはC3P0-config.xmlに、プロジェクトのクラスパスのデフォルトのパスを定義します「XML設定ファイルを経由して」、あなたは提供公式サイトのテンプレートに従って設定をコピーすることができます。
C3P0-config.xmlの簡単な設定例:

図3に示すように、中核オブジェクトデータベース接続オブジェクトComboPooledDateSourceを作成する(com.mchange.v2.c3p0.ComboPooledDataSourceを、あなたが相続またはソースコード内を達成するためにステップバイステップを参照して、結局するjavax.sql.DataSource実現することができる)
接続され得る、4:のgetConnection

以下の例は、単にの図C3P0メソッドを作成します。

ドルイド(ドルイド):

データベース接続プールを達成するためにアリババオープンソースプラットフォームは、DBプールとしてC3P0、DBCP、PROXOOLの利点を組み合わせたログ監視を添加しながら、良好なモニタ実装DB接続プールすることができ、SQL監視と健康のために言うことができますDB接続プールは、(世界最高のコネクションプーリングの一つであると言われ)。
ダウンロード:
このURL入力できhttp://repo1.maven.org/maven2/com/alibaba/druid/対応するフィードまたはで選択したバージョンhttps://mvnrepository.com/に対応するバージョンを選択し
、使用:
1、輸入ドルイド-1.1.9.jar(もちろん、輸入コネクタ- JavaベースのMySQL-XXXX bin.jarをすることを忘れないでください)
2、カスタムプロファイルは、プロパティファイルの形式で、あなたは任意の名前に名前を付けることができ、また任意のディレクトリに配置することができます、通称druid.propertiesの
構成パラメータを以下に示します。

図3に示すように、コンフィギュレーション・ファイルのロード
、データベース接続プールのオブジェクトへのアクセス4:ファクトリクラスDruidDataSourceFactory
5を、接続され得る:のgetConnectionは
ドルイドケースに接続された小さなプールを作成します。

春のJDBC:JDBCテンプレート

春のJDBCは、公式の春が提供する永続化フレームワークであり、およびJDBCパッケージの抽象、データベースの操作が非常に簡単になるようにする重複したJDBC繰り返し冗長コードを排除します。
ダウンロード
Mavenのリポジトリにhttps://mvnrepository.com/ 1をダウンロードした後、スプリングTX-5.1.5.RELEASE 2 、バネJDBC-5.1.5.RELEASE.jar 3、スプリングコア5.1.5.RELEASE 4の.jar、春豆-5.1.5.RELEASE.jar 5、コモンズ・ログ-1.2.jar( もちろんあなたもジャーパッケージの別のバージョンをダウンロードすることができます)
使用:
1、ジャーパッケージに(上記の5を除きます外袋もジャージャーパッケージJARパッケージ・データベース接続プールとデータベース接続)
2、JdbcTemplateは、データソースデータソースに依存するオブジェクトの作成、
新しい新しいJdbcTemplate(データソース)
3、完全JdbcTemplate CRUD操作のメソッド呼び出し。
更新():DML用DDL文または文; CRUDの文
queryForMap():クエリの結果セットには、パッケージを発生します(フィールドの列のキー、値値の名前、および結果セットのためのメソッドが返す長を1。)マップのコレクションです
queryForList():クエリ結果リストの後に(パッケージは、パッケージリストのセットを設定するマップ、クエリが複数あってもよく、各レコードセットをマッピングするために)結果セットパッケージの集合であります
クエリ():クエリ結果は、パッケージには、(。クエリRowMapperのパラメータは、通常、データのJavaBean自動包装を、新しいBeanPropertyRowMapper <タイプ>(タイプの.class)を完了するためにBeanPropertyRowMapperクラスを使用して実装)JavaBeanの結果である
クエリ結果:queryForObject()結果は、オブジェクト(クエリの重合の典型的機能)ラップされ

データベース接続プールの実行例(例えば、CRUD操作と同様の表現)にJdbcTemplateドルイドデータの変更を使用して:

そしてJdbcTemplateドルイド例クエリデータベース接続プールの実行データ(queryForMap()メソッド)を使用して:

データベースクエリでJdbcTemplateドルイド接続プールとデータを用いて、実施例(queryForList()メソッド)が実行されます。

データベースクエリでJdbcTemplateドルイド接続プールとデータを用いて、実施例(queryForObject()メソッド)が実行されます。

公開された23元の記事 ウォン称賛15 ビュー2549

おすすめ

転載: blog.csdn.net/u010511598/article/details/89393447