Javaのday30 [データベース接続プール、春のJDBC:JDBCテンプレート]

第一章   データベース接続プール

1.コンセプト:実際には、コンテナ(コレクション)、貯蔵容器データベース接続。
優れたシステムの初期化は、コンテナが作成されると、コンテナは、完成へのユーザーアクセスの後、接続オブジェクトは、コンテナに返され、ユーザーはコンテナから接続オブジェクトを取得するためにデータベースにアクセスするための接続オブジェクトのいくつかのために適用されます。

2.利点:
1.節約資源
2.ユーザー・アクセスと効率的な

3.実装:
データソースjavax.sqlのパッケージで:1.標準インタフェース
1.方法:
のgetConnection():*接続を取得
*リターン接続:Connection.closeを()。接続オブジェクトの接続は、接続プールから取得することであるならば、あなたは接続を閉じないであろう、Connection.close()メソッドを呼び出します。しかし、リターン接続

2.一般的に、我々はそれを理解していない、達成するために、データベース・ベンダーがある
データベース接続プールの技術:1. C3P0を
2ドルイド:アリババが提供するデータベース接続プールの実装技術は、

4. C3P0:データベース接続プーリング
*手順:
1.インポートのjarパッケージには、(2)c3p0-0.9.5.2.jar mchange-コモンズ-のJava-0.2.12.jarは、
*データベースドライバのjarパッケージをインポートすることを忘れないでください
2.定義をプロフィール:
*名前:c3p0.properties-config.xmlのかC3P0
*パス:直接srcディレクトリ内のファイルへ。

3.コアオブジェクトデータベース接続プール・オブジェクトComboPooledDataSource作成
4が接続されて取得:のgetConnection
*コード:
//データベース接続プールオブジェクトを作成します。
データソースComboPooledDataSource新しい新しいDS =();
// 2.接続オブジェクトを取得
接続ds.getConnectionコネティカット=を( );
5.ドルイド:アリババが提供するデータベース接続プールの実装技術、
1ステップ:
1.インポート-1.0.9.jarのjarパッケージドルイド
2.カスタムプロファイル:
*プロパティの形式である
*は任意の名前を呼び出すことができ、これは、任意のディレクトリに配置することができます
。3.負荷設定ファイル。プロパティ
4.データベース接続プール・オブジェクトは:DruidDataSourceFactoryにより植物を取得するための
接続を取得する5.:のgetConnection
*コード:
//ロード・プロファイル3.
プロパティProの新しい新しい=プロパティ();
のInputStream DruidDemo.class.getClassLoaderは、IS =()。 getResourceAsStream( "druid.properties");
pro.loadは(IS);
... // 4オブジェクトの接続プールを取得
DS = DruidDataSourceFactory.createDataSourceデータソース(プロ);
... 5 //取得接続
接続ds.getConnectionコネティカット=();
2.クラス定義がツール
1.クラスJDBCUtilsを定義し
、2静的コードブロックの読み込みコンフィギュレーションファイルを提供し、接続プールオブジェクトを初期化します
方法を提供する
接続方法を得る:1.データベース接続プールを介して接続取得
2.解放リソース
3.接続プールを得る方法を

*コード:
パブリッククラスJDBCUtils {

//メンバ変数データソース定義
プライベートデータソースの静的DSを、

静的{
試み{
//ロードプロファイル1
プロパティProの新しい新しい=プロパティ();
。Pro.load(JDBCUtils.class.getClassLoader()getResourceAsStream(「druid.propertiesを「));
// 2は、データソースを取得する
; DS = DruidDataSourceFactory.createDataSource(PRO)
}キャッチ(IOExceptionをE){
e.printStackTrace();
}キャッチ(例外E){
e.printStackTraceを();
}
}

/ **
*接続取得
* /
パブリック静的接続のgetConnection()スローのSQLException {
戻りds.getConnection();
}

/ **
*解放リソース
* /
パブリック静的ボイド近い(ステートメントstmtは、接続connが){
/ *場合(STMT = nullを!){
{みてください
)(stmt.closeを。
}キャッチ(のSQLException E){
e.printStackTrace();
}
}

(!= nullのをconnの){場合
{みてください
(はconn.closeを); //归还连接
}キャッチ(のSQLException e)は{
e.printStackTrace();
}
} * /

クローズ(ヌル、STMT、CONN)。
}

 パブリック静的ボイド近い(のResultSet RS、ステートメントSTMT、接続CONN){

(もし!RS = NULL){
{みてください
)(rs.closeを。
}キャッチ(のSQLException E){
e.printStackTrace();
}
}

IF(stmtは= nullを!){
試み{
stmt.close();
}キャッチ(のSQLException E){
e.printStackTrace();
}
}

(!コネティカット= NULL){IF
試し{
; //リターンはconn.close()接続
する} catch(のSQLException E){
e.printStackTrace();
}
}
}

/ **
*取得した接続プール
* /

パブリック静的をgetDataSourceデータソース(){
DSを返します;
}

}

第II章   春のJDBC

* Springフレームワークの簡単なパッケージJDBC。簡略化されJDBCTemplate対象のJDBCの開発を提供することは
*手順:
1.インポートジャーパッケージ
2. JdbcTemplateオブジェクトを作成します。データ・ソースに依存したDataSource
* JdbcTemplate JdbcTemplate新しい新しいテンプレート=(DS)。

3.コールJdbcTemplateの方法は、CRUD操作を行うには
DMLステートメントを実行:*更新()。ステートメントを変更、削除、追加
* queryForMap():クエリの結果は、マップセット、キーとしてカラム名、設定されたこのパッケージを置くためにマップとして記録された値の値としてパッケージ設定されている結果
*注:このメソッドは、クエリ結果の長さを設定し、唯一の1。
* queryForList():結果セットリスト封入のクエリの結果セット
*注:地図に設定された各パッケージレコード、リストにロードされた後、設定されたマップセット
*クエリ():クエリ結果、結果JavaBeanのようにカプセル化
RowMapperの:*クエリパラメータ
我々は、一般的にBeanPropertyRowMapper実装クラスを使用します*。自動包装完了するためのJavaBeanデータ
*新しいBeanPropertyRowMapper <タイプ>(タイプの.class)
* queryForObject:クエリ結果は、結果はオブジェクトにラップされ
、重合のために*を、一般的に、クエリの関数であり、

4.演習:
*要件:
1.レビュー第1給与データ10000
2.レコードを追加し
たレコードだけを追加、削除
地図のセットとしてパッケージ化4.クエリIDレコード1、
5、クエリのすべてのレコードを、リストとしてパッケージ
6.すべてのレコードは、オブジェクトの集合としてリストEmpのパッケージ化されたクエリ
、レコードクエリの7合計数を

*コード:

インポートcn.itcast.domain.Emp;
インポートcn.itcast.utils.JDBCUtils;
インポートorg.junit.Test;
インポートorg.springframework.jdbc.core.BeanPropertyRowMapper;
インポートorg.springframework.jdbc.core.JdbcTemplate。
インポートorg.springframework.jdbc.core.RowMapper;

インポートjava.sql.Date;
インポートのjava.sql.ResultSet;
インポートjava.sql.SQLExceptionという、
インポートjava.util.Listに、
インポートjava.util.Map;

publicクラスJdbcTemplateDemo2 {

// JUnitのユニットテスト、独立した実行方法を可能にします

// JDBCTemplateは、オブジェクトを取得し
、プライベートJdbcTemplate JdbcTemplate新しい新しいテンプレート=(JDBCUtils.getDataSource())
/ **
10000 * 1レビュー第1給与データ
* /
@Test
ます。public void test1に(){

// 2が定義されてSQL
文字列のSQL = "給与SETのEMPを更新WHERE ID = = 1001 10000";
// 3実行SQL。
int型のCOUNT = template.update(SQL);
System.out.printlnは(COUNT);
}

/ **
* 2.追加記録
* /
@Test
公共ボイドTEST2(){
文字列のSQL = "(上記ID、ENAME、DEPT_ID言及)値(,, ???)EMP。INSERT INTO";
int型COUNT = template.update(SQL、1015 "郭靖" 、10);
System.out.printlnは(COUNT);

}

/ **
* 3.ちょうどレコードを削除します
* /
@Test
{)公共ボイドTest3は(
文字列のSQLが= "?=上記IDを挙げる場所から削除するEMP";
のInt COUNT = template.update(SQL 1015);
のSystem.out.println(COUNT);
}

/ **
* 4クエリマップのセットとしてパッケージIDのレコード1001
*注:。のみとすることができる結果セットを照会するには、この方法の長さは1
* /
@Test
公共ボイドTEST4(){
列= SQL「EMP ID = IDまたはSELECT * FROM? =「;?
マップの<string、オブジェクト> = template.queryForMapマップ(SQL 1001、1002);
のSystem.out.println(MAP);
// {上記ID = 1001 ENAME =猿王、JOB_ID = 4、MGR = 1004 、joindate = 2000年12月17日には、給与= 10000.00、ボーナス=ヌル、20} = DEPT_IDある

}

/ **
* 5一覧としてパッケージ化照会すべてのレコード、
* /
@Test
公共ボイドTEST5(){
文字列のSQL = "EMPから選択*";
一覧<地図<文字列、オブジェクト>>一覧= template.queryForList(SQL);

(地図の<string、オブジェクト> stringObjectMap:リスト)のための{
のSystem.out.println(stringObjectMap)。
}
}

/ **
* 6查询所有记录、将其封装为のEmp对象的リスト集合
* /

@Test
公共ボイドTEST6(){
文字列のSQL = "EMP SELECT * FROM"。
リスト<Empを>リスト= template.query(SQL、新しいRowMapperの<Empを>(){

@Override
公共のEmp mapRow(ResultSetのRSは、IをINT)のSQLException {スロー
のEmp EMP =新しいEmpの();
int型ID = rs.getIntを( "ID");
文字列ENAME = rs.getString( "ENAME");
INT JOB_ID = rs.getInt( "JOB_ID");
INT MGR = RS。
日joindate = rs.getDate( "joindate");
ダブル給与= rs.getDouble( "給与");
ダブルボーナス= rs.getDouble( "ボーナス");
int型DEPT_ID = rs.getInt( "DEPT_ID");

emp.setId(ID)。
emp.setEname(ENAME)。
emp.setJob_id(JOB_ID)。
emp.setMgr(MGR)。
emp.setJoindate(joindate)。
emp.setSalary(給料)
emp.setBonus(ボーナス)。
emp.setDept_id(DEPT_ID)。

EMPを返します。
}
})。

(EMPのEmp:リスト)のための{
のSystem.out.println(EMP);
}
}

/ **
* 6すべてのレコードのクエリは、リストのEmpオブジェクトのセットとしてパッケージ化される
* /

@Test
公共ボイドtest6_2(){
文字列のSQL = "SELECT * EMPから";
リスト<Empの>リスト= template.query(SQL、新しい新しいBeanPropertyRowMapper <Empを>(Emp.class));
(EMPのEmp:リスト)のための{
のSystem.out.println(EMP);
}
}

/ **
*レコードの合計数は、クエリ7
* /

@Test
公共ボイドTEST7(){
列= SQL "SELECT COUNT(ID)EMPから";
ロング合計= template.queryForObject(SQL、Long.class);
システム。 out.printlnを(トータル);
}

}

おすすめ

転載: www.cnblogs.com/xuweng/p/11245715.html