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

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

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>

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();
            }
        }
    }
}

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

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

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();
            }
        }
    }
}
.

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!

Déclaration
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer
Quels sont les différents algorithmes de collecte des ordures en Java (série, parallèle, CMS, G1, ZGC)?Quels sont les différents algorithmes de collecte des ordures en Java (série, parallèle, CMS, G1, ZGC)?Mar 14, 2025 pm 05:06 PM

L'article traite de divers algorithmes de collecte de ordures Java (série, parallèle, CMS, G1, ZGC), leurs impacts de performance et leur pertinence pour les applications avec de grands tas.

Qu'est-ce que la machine virtuelle Java (JVM) et comment fonctionne-t-elle en interne?Qu'est-ce que la machine virtuelle Java (JVM) et comment fonctionne-t-elle en interne?Mar 14, 2025 pm 05:05 PM

L'article traite de la machine virtuelle Java (JVM), détaillant son rôle dans l'exécution des programmes Java sur différentes plateformes. Il explique les processus internes de JVM, les composants clés, la gestion de la mémoire, la collecte des ordures et l'optimizatio des performances

Comment utiliser le moteur Nashorn de Java pour les scripts avec JavaScript?Comment utiliser le moteur Nashorn de Java pour les scripts avec JavaScript?Mar 14, 2025 pm 05:00 PM

Le moteur Nashorn de Java permet des scripts JavaScript dans les applications Java. Les étapes clés comprennent la configuration de Nashorn, la gestion des scripts et l'optimisation des performances. Les principaux problèmes impliquent la sécurité, la gestion de la mémoire et la compatibilité future due à Nashorn's Deprec

Comment utiliser l'instruction TRY-With-Resources de Java pour la gestion automatique des ressources?Comment utiliser l'instruction TRY-With-Resources de Java pour la gestion automatique des ressources?Mar 14, 2025 pm 04:59 PM

Le TRY-With-Resources de Java simplifie la gestion des ressources en fermant automatiquement les ressources comme des flux de fichiers ou des connexions de base de données, en améliorant la lisibilité du code et la maintenabilité.

Comment utiliser les énumérations de Java pour représenter des ensembles de valeurs fixes?Comment utiliser les énumérations de Java pour représenter des ensembles de valeurs fixes?Mar 14, 2025 pm 04:57 PM

Les énumérations Java représentent des ensembles de valeurs fixes, offrant une sécurité, une lisibilité et des fonctionnalités supplémentaires via des méthodes et des constructeurs personnalisés. Ils améliorent l'organisation du code et peuvent être utilisés dans les instructions de commutation pour une gestion efficace de la valeur.

See all articles

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

Listes Sec

Listes Sec

SecLists est le compagnon ultime du testeur de sécurité. Il s'agit d'une collection de différents types de listes fréquemment utilisées lors des évaluations de sécurité, le tout en un seul endroit. SecLists contribue à rendre les tests de sécurité plus efficaces et productifs en fournissant facilement toutes les listes dont un testeur de sécurité pourrait avoir besoin. Les types de listes incluent les noms d'utilisateur, les mots de passe, les URL, les charges utiles floues, les modèles de données sensibles, les shells Web, etc. Le testeur peut simplement extraire ce référentiel sur une nouvelle machine de test et il aura accès à tous les types de listes dont il a besoin.

PhpStorm version Mac

PhpStorm version Mac

Le dernier (2018.2.1) outil de développement intégré PHP professionnel

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Puissant environnement de développement intégré PHP

SublimeText3 Linux nouvelle version

SublimeText3 Linux nouvelle version

Dernière version de SublimeText3 Linux