従来の方法と接続プーリング方法
従来の方法の手順
従来の方法を使用するJava で JDBC を使用してデータベースに接続し、データベース操作を完了するには、通常、次の手順が必要です:
1. ドライバーをロードします。
2. 接続を確立します。
3. SQL ステートメントを実行します。
4. 接続を解放します。
5. 従来の方法の欠点
データベースに対するすべての操作で接続を確立する必要があり、取得した Connection オブジェクトがメモリにロードされるため、大量のメモリと時間が消費されます。 . .接続の確立が必要な操作が短期間に多数ある場合、システム リソースが大量に占有され、サーバーがクラッシュすることもあります。
コネクションの確立に対応して、使用するたびに手動でコネクションを解放する必要があります。コネクションの解放を忘れたり、例外によりプログラムが解放に失敗するとメモリリークが発生します。 。
さらに、従来の方法では接続数を制御できないため、接続する人が多すぎると接続オブジェクトが無制限に作成され、過剰なメモリ オーバーヘッドやサーバーのクラッシュが発生します。
(推奨ビデオ: java ビデオ チュートリアル )
接続プールの手順
1. 接続プールの作成と構成接続属性。
2. 接続プールを使用して接続を取得します。
接続プールの利点
データベースに接続する必要があるたびに、接続を確立する必要はなく、接続プールを通じて接続を取得します。接続を提供します。
接続を使用した後、手動で接続を解放する必要はありません。接続プールによって接続が解放されます。
接続数は接続プールを通じて制御でき、接続プール内の接続は何度でも再利用できるため、無制限に接続が作成されるという問題が回避されます。
接続プールを使用します
C3P0 データベース接続プールを使用します
jar パッケージをインポートします:
c3p0-0.9.5.2.jar
現在のプロジェクト src の下に c3p0-config.xml という名前の新しい構成ファイルを作成します。ファイル名は変更できないことに注意してください。内容は次のとおりです:
<c3p0-config> <!-- 连接名称 --> <named-config name="mysql"> <!-- 接数据库的驱动类名 --> <property name="driverClass">com.mysql.jdbc.Driver</property> <!-- 连接属性 --> <property name="jdbcUrl">jdbc:mysql://192.168.35.128:3306/demo</property> <property name="user">root</property> <property name="password">123456</property> <!-- 当连接池用完时等待获取新连接的时间,超时后将抛出SQLException,单位毫秒,如设为0则无限期等待。默认为0。 --> <property name="checkoutTimeout">5000</property> <!-- 当连接用尽后,一次获取的连接个数 --> <property name="acquireIncrement">2</property> <!-- 初始连接数 --> <property name="initialPoolSize">1</property> <!-- 最小连接数 --> <property name="minPoolSize">3</property> <!-- 最大连接数 --> <property name="maxPoolSize">5</property> </named-config> </c3p0-config>
プログラム コード:
public class TestDataPool { // 根据配置文件里的名称创建连接池 public static ComboPooledDataSource cpds = new ComboPooledDataSource("mysql"); /** * 主程序 */ public static void main(String[] args) { // 模拟多次对数据库的查询操作 for (int i = 0; i < 6; i++) { new Thread(new Runnable() { @Override public void run() { select(); } }, "线程" + i).start(); } } /** * 查询程序 */ public static void select() { Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; // 获取连接并执行SQL try { conn = cpds.getConnection(); pstmt = conn.prepareStatement("select * from student where id = 906"); rs = pstmt.executeQuery(); while (rs.next()) { System.out.println(Thread.currentThread().getName() + "\t" + rs.getString(1) + "\t" + rs.getString(2) + "\t" + rs.getString("address")); } } catch (Exception e) { e.printStackTrace(); } finally { // 释放资源 try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } try { pstmt.close(); } catch (SQLException e) { e.printStackTrace(); } try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } }
Use DBCPデータベース接続プール
jar パッケージのインポート:
commons-dbcp-1.4.jar2 commons-pool-1.5.5.jar
現在のプロジェクトのコード ルート ディレクトリ src に dbcp.properties という名前の新しい構成ファイルを作成します。ファイル名は、コード内で参照されるファイル名 内容は次のとおりです:
# 接数据库的驱动类名 driverClassName=com.mysql.jdbc.Driver # 连接属性 url=jdbc:mysql://192.168.35.128:3306/demo username=root password=123456 # 初始化连接数 initialSize=10 # 最大连接数 maxActive=15
プログラムコード:
public class TestDBCP { // 根据配置文件里的名称创建连接池 private static DataSource source = null; static { Properties pros = new Properties(); InputStream is = TestDBCP.class.getClassLoader().getResourceAsStream("dbcp.properties"); try { pros.load(is); source = BasicDataSourceFactory.createDataSource(pros); } catch (Exception e) { e.printStackTrace(); } } /** * 主程序 */ public static void main(String[] args) { // 模拟多次对数据库的查询操作 for (int i = 0; i < 6; i++) { new Thread(new Runnable() { @Override public void run() { select(); } }, "线程" + i).start(); } } /** * 查询程序 */ public static void select() { Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; // 获取连接并执行SQL try { conn = source.getConnection(); pstmt = conn.prepareStatement("select * from student where id = 906"); rs = pstmt.executeQuery(); while (rs.next()) { System.out.println(Thread.currentThread().getName() + "\t" + rs.getString(1) + "\t" + rs.getString(2) + "\t" + rs.getString("address")); } } catch (Exception e) { e.printStackTrace(); } finally { // 释放资源 try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } try { pstmt.close(); } catch (SQLException e) { e.printStackTrace(); } try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } }
以上がJava 操作データベース - 接続プールを使用してデータベースに接続しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。