Javaデータベース・アクセス-JDBC方法(接続プール付き)

データベースへのJDBC接続を記録するための最も基本的な方法上記のが、問題を見ることができ、常により頻繁場合は、データベースへのアクセス場合のように、このアプローチを接続し、密接な関係を作成するために繰り返すことですパフォーマンスは、データベースにアクセスするためのJDBCデータベース接続プールを使用して、以下の複合体は適切ではありません。

mysqlの、データベース接続プールを導入する必要性を駆動することに加えて、この選択はdbcp2ある(同様のC3P0がありますが、アリはドルイド)、実際には、原則はお互いを理解することは非常に簡単に始めることです、データベース接続プールに似ています。

依存性の導入:

    <依存>
            <groupIdを> org.apache.commons </ groupIdを>
            <たartifactId>コモンズ-dbcp2 </たartifactId>
            <バージョン> 2.5.0 </バージョン>
        </依存関係>

この二次クエリデータ:

クエリサービスコード:

パッケージcom.test.database。

インポートのjava.sql.Connection;
インポートのjava.sql.ResultSet;
輸入java.sql.Statementの;

輸入javax.annotation.PostConstruct;

輸入org.apache.commons.dbcp2.BasicDataSource。
import org.springframework.stereotype.Service;

@サービス
パブリック クラスJdbcPooledService {

    接続の接続。
    BasicDataSourceのBasicDataSource = 新しいのBasicDataSource();

    初期化動作を行うための@PostConstruct //ここで、接続プールの初期化
    公共 のボイドinitPool(){
        System.out.println( "PostConstructのINIT ....." );
        basicDataSource.setDriverClassName( "はcom.mysql.jdbc.Driver" );
        basicDataSource.setUsername( "ルート" )。
        basicDataSource.setPassword( "ルート" )。
        basicDataSource.setUrl( "JDBCます。mysql:// localhostを:3306 /テスト" );

    }

    公共 のボイド testJdbc()スロー{例外を
        System.out.println(basicDataSource.getNumActive())。
        接続 = basicDataSource.getConnection()。
        声明 = connection.createStatement();
        文字列のSQL =「ユーザからの選択*」;
        ResultSetたresultSet = statement.executeQuery(SQL)。
        一方、(resultSet.next()){
            System.out.println(resultSet.getString( "名前" ));
        }
        resultSet.close();
        statement.close();
        connection.close(); //接続プールもcloseメソッドを呼び出す必要があるが、今回は近くの接続が閉じていないが、接続プールへの意志も接続バック
    }

}

テストカテゴリ:

パッケージcom.test;

輸入org.springframework.beans.BeansException。
輸入org.springframework.context.ApplicationContext;
輸入org.springframework.context.support.ClassPathXmlApplicationContext;

輸入com.test.database.JdbcPooledService。

パブリック クラスメイン{

    パブリック 静的 ボイドメイン(文字列[]引数)がスローBeansException、例外{
        ApplicationContextのコンテキスト = 新しい ClassPathXmlApplicationContext( "バネのcontext.xml" )。
        context.getBean(TestService。クラス).TEST();
        // context.getBean(JdbcService.class).testJdbc(); 
        以下のためにINT iは= 0; I <10; I ++ ){
            System.out.println(I);
            context.getBean(JdbcPooledService。クラス).testJdbc();
        }
    }

}

印刷出力は次のようになります。

PostConstructのINIT .....
テストサービス
0
0
ティム
1
0
ティム
2
0
ティム
3
0
ティム
4
0
ティム
5
0
ティム
6
0
ティム
7
0
ティム
8
0
ティム
9
0
ティム

閉じていない場合は、呼接続の終わりに(また、接続プールへのバックを接続しています):

パッケージcom.test.database。

インポートのjava.sql.Connection;
インポートのjava.sql.ResultSet;
輸入java.sql.Statementの;

輸入javax.annotation.PostConstruct;

輸入org.apache.commons.dbcp2.BasicDataSource。
import org.springframework.stereotype.Service;

@サービス
パブリック クラスJdbcPooledService {

    接続の接続。
    BasicDataSourceのBasicDataSource = 新しいのBasicDataSource();

    @PostConstruct // 初期化動作を行うため、接続プールの初期化
    公共 ボイドinitPool(){
        System.out.println( "PostConstructのINIT ....." );
        basicDataSource.setDriverClassName( "はcom.mysql.jdbc.Driver" );
        basicDataSource.setUsername( "ルート" )。
        basicDataSource.setPassword( "ルート" )。
        basicDataSource.setUrl( "JDBCます。mysql:// localhostを:3306 /テスト" );

    }

    公共 のボイド testJdbc()スロー{例外を
        System.out.println(basicDataSource.getNumActive())。
        接続 = basicDataSource.getConnection()。
        声明 = connection.createStatement();
        文字列のSQL =「ユーザからの選択*」;
        ResultSetたresultSet = statement.executeQuery(SQL)。
        一方、(resultSet.next()){
            System.out.println(resultSet.getString( "名前" ));
        }
        resultSet.close();
        statement.close();
        // connection.close(); 
    }

}

クラスは次のようにテスト結果を呼び出すために続けます。

PostConstructのINIT .....
テストサービス
0
0
ティム
1
1
ティム
2
2
ティム
3
3
ティム
4
4
ティム
5
5
ティム
6
6
ティム
7
7
ティム
8
8

そこには呼接続に近い方法がありません、そして8であるdbcp2接続のデフォルトの最大数は、その接続を取得するために接続プーリングを使用した場合の最大接続数、注意を払うが、オフにしてください持っているので、現象は8つのコネクションの確立は、もはや、確立されていませんさ接続。

接続のデフォルトの最大数:

パブリック 静的 最終 int型 DEFAULT_MAX_TOTAL = 8;

:ソースの近くの接続方法があり、最終的な呼び出しを取得するために接続プールを呼び出します

メソッドの宣言:
 同期の使用を閉じる(公共ボイド)のSQLExceptionスロー
キーの呼び出しを:
pool.returnObject(この);

この接続は、接続プールに戻さ。

おすすめ

転載: www.cnblogs.com/silenceshining/p/11932806.html