Maison > Java > JavaBase > le corps du texte

Base de données d'opération Java - utilisez le pool de connexions pour vous connecter à la base de données

angryTom
Libérer: 2019-11-26 15:43:13
avant
3701 Les gens l'ont consulté

Base de données d'opération Java - utilisez le pool de connexions pour vous connecter à la base de données

Méthode traditionnelle et méthode de regroupement de connexions

Étapes de la méthode traditionnelle

Utiliser la méthode traditionnelle dans JDBC est utilisé en Java pour se connecter à la base de données et effectuer une opération de base de données. Généralement, il y a les étapes suivantes :

1.

2. Établissez la connexion.

3. Exécutez l'instruction SQL.

4. Libérez la connexion.

5. Inconvénients de la méthode traditionnelle

Chaque opération sur la base de données nécessite l'établissement d'une connexion, et l'objet Connection résultant sera chargé en mémoire, ce qui consomme beaucoup de mémoire et de temps. . Si de nombreuses opérations nécessitent l'établissement d'une connexion dans un court laps de temps, cela occupera beaucoup de ressources système et provoquera même un crash du serveur.

Correspondant à l'établissement d'une connexion, vous devez libérer manuellement la connexion à chaque fois que vous l'utilisez. Si vous oubliez de libérer la connexion ou si le programme ne parvient pas à la libérer en raison d'une exception, cela provoquera une fuite de mémoire. .

De plus, la méthode traditionnelle ne peut pas contrôler le nombre de connexions. Si trop de personnes sont connectées, un nombre illimité d'objets de connexion seront créés, entraînant une surcharge de mémoire excessive et un crash du serveur.

(Vidéo recommandée : Tutoriel vidéo Java)

Étapes du pool de connexion

Créez un pool de connexions et configurez-le. la propriété de connexion.

2. Utilisez un pool de connexion pour obtenir une connexion.

Avantages du pool de connexions

Chaque fois que vous devez vous connecter à la base de données, vous n'avez pas besoin d'établir une connexion, mais de l'obtenir via le pool de connexions, qui assure la connexion.

Après avoir utilisé la connexion, vous n'avez pas besoin de libérer manuellement la connexion, mais laissez le pool de connexions libérer la connexion.

Le nombre de connexions peut être contrôlé via le pool de connexions. Les connexions du pool de connexions peuvent être réutilisées plusieurs fois, évitant ainsi le problème de la création de connexions illimitées.

Utiliser le pool de connexions

Utiliser le pool de connexions à la base de données C3P0

Importer le package jar :

c3p0-0.9.5.2.jar
Copier après la connexion

Dans le répertoire racine du code du projet en cours Créez un nouveau fichier de configuration nommé c3p0-config.xml sous src Notez que le nom du fichier ne peut pas être modifié. Le contenu est le suivant :

<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>
Copier après la connexion

Code du programme :

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();
            }
        }
    }
}
Copier après la connexion

Utiliser DBCP. pool de connexion à la base de données

Importez le package jar :

 commons-dbcp-1.4.jar2 commons-pool-1.5.5.jar
Copier après la connexion

Créez un nouveau fichier de configuration nommé dbcp.properties sous le répertoire racine du code src du projet en cours. Le nom du fichier doit être le même que celui. le nom du fichier référencé dans le code. Le contenu est le suivant :

# 接数据库的驱动类名
driverClassName=com.mysql.jdbc.Driver
# 连接属性
url=jdbc:mysql://192.168.35.128:3306/demo
username=root
password=123456
# 初始化连接数
initialSize=10
# 最大连接数
maxActive=15
Copier après la connexion

Code du programme :

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();
            }
        }
    }
}
Copier après la connexion
.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:cnblogs.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!