ホームページ  >  記事  >  Java  >  Java 操作データベース - 接続プールを使用してデータベースに接続します

Java 操作データベース - 接続プールを使用してデータベースに接続します

angryTom
angryTom転載
2019-11-26 15:31:413693ブラウズ

Java 操作データベース - 接続プールを使用してデータベースに接続します

従来の方法と接続プーリング方法

従来の方法の手順

従来の方法を使用する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 サイトの他の関連記事を参照してください。

声明:
この記事はcnblogs.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。