Javaがデータベースに単純に接続し、DriverManagerを介して接続を取得する方法を以前に記述しましたが、実際にはほとんど使用されません。効率が低いため、接続プールを使用するとプログラムのパフォーマンスが大幅に向上します
接続プールを使用して接続を管理する
まず、データベース接続プールの原理
データベースを使用する場合、最初にデータベースに接続する必要があります。元の接続方法は、DriverManagerを介して接続を取得することです。データベース接続オブジェクトは、物理データベース接続に対応します。データベースが操作されるたびに、物理接続が開かれ、使用後に閉じられます。頻繁に図に示すように、開閉するとシステムパフォーマンスが低下
します。データベースを頻繁に開閉することで発生する非効率性を、データベースを使用するときにどのように解決すればよいでしょうか。
データベース接続プールが解決される
アプリケーションが起動すると、システムはときにするためのイニシアチブ取る確立する十分なデータベース接続をし、これらの接続がプールを形成し、使用するたびに、あなたが再オープンしていない接続を、接続プールから直接来ていますいくつかの接続が使用され、それらは使い果たされ、閉じる必要はありません。接続プールに戻るだけです。接続プールを使用すると、プログラムの効率が大幅に向上しました。
第二に、データベース接続プールの使用
JDBCは、データベース接続のプールをするjavax.sql.DataSource、表現するために使用されるデータソースは、唯一のインタフェース、商用サーバを達成するために提供しなければならないが、より一般的に(例えば、DBCP、C3P0など)オープン組織を達成するためにも使用され、データソースは、一般に、データソースと呼ばれる含みます、接続プールと接続プールの管理。ただし、通常はDataSourceを接続プールとして参照します。
1. DBCPデータソース
接続プールの実装は、2つのjarパッケージに依存する必要があります。最初のすべての手順では、最初にjarパッケージを追加する必要があります。
DBCPデータソースを使用して、データベース接続方法を取得します。
//创建数据源对象
BasicDataSource bds = new BasicDataSource();
//设置连接池所需的驱动
bds.setDriverClassName("com.mysql.jdbc.Driver");
//设置连接数据库的URL
bds.setUrl("jdbc:mysql://localhost:3306/csdn");
//设置连接数据库的用户名
bds.setUsername("root");
//设置连接数据库的密码
bds.setPassword("root");
//设置连接池的初始连接数
bds.setInitialSize(5);
//设置连接池最多有多少个活动的连接数
bds.setMaxActive(20);
//设置连接池中最多有多少空闲的连接
bds.setMinIdle(2);
注:アプリケーション全体で必要なデータソースは1つだけです。つまり、上記のコードは 1回だけ実行されます。
最適化:上記のbdsを静的メンバー変数として設定し、アプリケーションの起動時にデータソースオブジェクトを初期化できます。プログラムでデータベース接続を取得する必要がある場合は、 bdsオブジェクトに直接アクセスしてデータベース接続を取得します
次に、 DataSource を介してデータベース接続を取得します。
//通过数据源获得数据库的连接
Connection con = bds.getConnection();
......
//释放连接
con.close();
2. C3P0データソース
そして、前回のDBCPデータソースに比べ、より優れたパフォーマンスC3P0データソース、推奨 C3P0ようにすることができ、自動的にクリーンアップしない、もはや使用中の接続、それはまた、自動的にクリーンアップすることができステートメントおよびResultSetを。
同様に、C3P0接続プールを使用する場合は、jarパッケージを増やす必要があります:c3p0-0.9.1.2.jar
C3P0データソースを使用して、データベース接続方法を取得します。
//创建连接池实例
ComboPooleDataSource cds = new ComboPooleDataSource();
//设置连接池所需的驱动
cds.setDriverClass("com.mysql.jdbc.Driver");
//设置连接数据库的URL
cds.setjdbcUrl("jdbc:mysql://localhost:3306/csdn");
//设置连接数据库的用户名
cds.setUser("root");
//设置连接数据库的密码
cds.setPassword("root");
//设置连接池的初始连接数
cds.setInitialPoolSize(20);
//设置最大连接数
cds.setMaxPoolSize(30);
//设置最小连接数
cds.setMinPoolSize(3);
//设置连接池里的缓存 Statement 的最大数
cds.setMaxStatement(150);
C3P0接続プールを作成する方法は、DBCP接続プールを作成する前の方法と基本的に同じです。C3P0接続プールを取得した後、データベースへの同じ接続が取得されます。
//获得数据库的连接
Connection con = cds.getConnection();
//同样的释放连接
con.close();
:注この時点で、データベース接続のリリースでしたが、近くにいないのデータベースの物理的な接続、接続のみのリリースは、プールへの接続を解放し、他のユーザーは、接続を使用することができます。