従来の方法と接続プーリング方法
従来の方法の手順
従来の方法を使用する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 サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。
