接続プールを使用してJDBC接続を管理する-DBCPデータソースとC3P0データソース

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を

同様に、C3P​​0接続プールを使用する場合は、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();

:注この時点で、データベース接続のリリースでしたが、近くにいないのデータベースの物理的な接続、接続のみのリリースは、プールへの接続を解放し、他のユーザーは、接続を使用することができます。

元の記事を7件公開 8 件を獲得 1268件を訪問

おすすめ

転載: blog.csdn.net/tanghaixu/article/details/105622680