[JDBC] JDBC && pool de connexions

table des matières

Présentation de JDBC

Étapes de mise en œuvre JDBC

Introduction aux API associées dans JDBC

    DriverManager: objet de gestion de lecteur

    Connexion: objet de connexion à la base de données

    Instruction: exécuter un objet SQL

    ResultSet: objet d'ensemble de résultats

    PreparedStatement: exécuter un objet SQL

Piscine de connexion Druid

Méthode codée en dur:

Extraire des classes d'outils et utiliser des fichiers de configuration pour créer des pools de connexions


Présentation de JDBC

    JDBC: Java DataBase Connectivity. Son rôle est d'exploiter des bases de données via Java dans des pays étrangers . Essentiellement, il définit un ensemble de règles (interfaces) pour faire fonctionner toutes les bases de données relationnelles, puis chaque fabricant de base de données implémente cet ensemble d'interfaces, en fournissant La base de données pilote le package jar, puis nous utilisons cette interface (JDBC) pour programmer afin de piloter les classes d'implémentation dans le package jar

Étapes de mise en œuvre JDBC

    Avant d'implémenter JDBC, vous devez d'abord importer le package jar (mysql-connection-java-5.1.37-bin), puis commencer à exécuter l'opération en six étapes de JDBC.

lien de package jar:

Lien: https://pan.baidu.com/s/1LsyTxuoDGrOh2cqNt9UfaQ 
Code d'extraction: nfn8

 

  • Enregistrer le pilote
  • Obtenir l'objet de connexion à la base de données, connexion
  • Définir SQL
  • Récupère l'objet qui exécute l'instruction SQL, instruction
  • Exécutez SQL, recevez le résultat renvoyé
  • résultat du processus
  • Libérer les ressources 

 

Code de cas:

public void testSave() throws Exception {
        //1.注册驱动
        DriverManager.registerDriver(new Driver());
        String url = "jdbc:mysql://localhost:3306/student";
        String username = "root";
        String password = "root";
        //2.获得连接
        Connection connection = DriverManager.getConnection(url, username, password);
        //3.获得语句执行者
        Statement st = connection.createStatement();
        //4.执行语句
        String sql = "INSERT INTO tab_account VALUES(NULL , 'rose' , '1000')";
        int count = st.executeUpdate(sql);
        //5.处理结果
        System.out.println(count);
        //6.释放资源
        st.close();
        connection.close();
    }
}

Introduction aux API associées dans JDBC

    DriverManager: objet de gestion de lecteur

effet:

  • Enregistrer le pilote

   registre vide statique Pilote (pilote de pilote):

   Inscrivez-vous avec le pilote DriverManager donné

  Ecrire du code en utilisant (classe de chargement dynamique): Class.forName ("com.mysql.jdbc.Driver").

   En affichant le code source, on constate qu'il existe des blocs de code statiques dans la classe com.mysql.jdbc.Driver

static{
    try{
        java.sql.DriverManager.registerDriver(new Driver);
    }catch(SQLException e){
        throw new RuntimeException("Can't register driver!");
    }
}

Le package jar du pilote après MySQL5 peut omettre l'étape d'enregistrement du pilote

  • Obtenir une connexion à la base de données
方法: connexion statique getConnection (String url, String user, String password)
paramètre:
    url : spécifiez le chemin de la connexion
        Syntaxe: jdbc: mysql: // adresse IP (nom de domaine): numéro de port / nom de base de données
        Détails: Si vous vous connectez à un serveur mysql local et que le port par défaut du serveur mysql est 3306, l'url peut être abrégée: jdbc: mysql: // nom de la base de données
    user : nom d'utilisateur de la base de données
    mot de passe : mot de passe de la base de données

    Connexion: objet de connexion à la base de données

effet:

  • Obtenir un objet SQL exécuté

instruction createStatement ()

PreparedStatement prepareStatement (chaîne sql)

  • Affaires de gestion

Démarrer la transaction: setAutoCommit (boolean autoCommit) appelle cette méthode pour définir le paramètre sur false, c'est-à-dire démarrer la transaction

Validez la transaction: commit ()

Annuler la transaction: rollback ()

    Instruction: exécuter un objet SQL

  • boolean execute (String sql): peut exécuter n'importe quel SQL   

  • int executeUpdate (String sql): exécute l'instruction DML (ajout, suppression, modification) et la valeur renvoyée est le nombre de lignes concernées. Cela détermine si l'instruction DML est exécutée avec succès.

  • ResultSet executeQuery (String SQL): exécuter l'instruction DQL (requête)

    ResultSet: objet d'ensemble de résultats

  • boolean next (): le curseur se déplace d'une ligne vers le bas pour déterminer si la fin actuelle de la dernière ligne (s'il y a des données), s'il y en a, il renvoie false, sinon il retourne true
  • getXxxx (paramètre): obtenir des données
    • Xxx: représente le type de données, tel que getInt (int / String), getString (int / String)
    • paramètre
      • int représente le numéro de la colonne, à partir de 1,
      • Chaîne: représente le nom de la colonne     
  • Remarque
    • Étapes d'utilisation
      • Déplacez le curseur d'une ligne vers le bas
      • Déterminez s'il y a des données
      • récupérer des données

    PreparedStatement: exécuter un objet SQL

{Empêcher l'injection SQL, plus efficace}
  • Problème d'injection SQL: lors de l'épissage SQL, certains mots clés spéciaux SQL participent à l'épissage des chaînes, ce qui entraînera des problèmes de sécurité
  • Résolvez le problème d'injection SQL, utilisez l'objet PreparedStatemet pour résoudre
  • SQL précompilé: utilisation du paramètre? Comme espace réservé
  • étape
    • Importez le package jar du pilote, mysql-connector-java-5.1.37-bin.jar
    • Enregistrer le pilote
    • Obtenir l'objet de connexion à la base de données Connection
    • Définir SQL
      • Remarque: les paramètres SQL utilisent? Comme espace réservé, ----> sélectionnez * à partir de l'utilisateur où nom d'utilisateur =? Et mot de passe =?
    • Attribuer?
      • Méthode ---> setXxx (paramètre 1, paramètre 2)
        • Paramètre 1: le codage de la position commence à 1
        • Paramètre 2: La valeur de?
    • Exécuter SQL, recevoir les résultats renvoyés, pas besoin de passer de paramètres
    • résultat du processus
    • Libérer les ressources

Code de cas du package initial JDBC:

Fichier de configuration:

driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql:///student
username=root
password=root
package com.james.Utils;
import java.io.FileReader;
import java.io.IOException;
import java.net.URL;
import java.sql.*;
import java.util.Properties;
public class JDBCUtils {
    private static String url;
    private static String user;
    private static String password;
    private static String driver;
    static{
        //读取资源文件获取值
        try {
            //1 创建Properties集合类
            Properties properties = new Properties();
            //2 获取src路径下的文件的方式----->classLoader  类加载器
            ClassLoader classLoader=JDBCUtils.class.getClassLoader();
            URL res=classLoader.getResource("jdbc.properties");
            // 获取配置文件路径
            String path=res.getPath();
            //3 加载文件
            properties.load(new FileReader(path));
            //4 获取数据
            url=properties.getProperty("url");
            user=properties.getProperty("user");
         password=properties.getProperty("password");
            //5 注册驱动
         driver=properties.getProperty("driver");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    /*
     * 获取连接对象的方法
     * */
    public static Connection getConnection() throws SQLException {
        return DriverManager.getConnection(url,user,password);
    }

Piscine de connexion Druid

    Le pool de connexions est un conteneur de stockage de la base de données. Lorsque le système est initialisé, le conteneur est créé. Le conteneur s'appliquera à certains objets de connexion. Lorsque l'utilisateur accède à la base de données, l'objet de connexion est obtenu à partir du conteneur. Une fois que l'utilisateur accède à la base de données, l'objet de connexion est renvoyé à récipient.

avantage:

  • Économisez des ressources et réduisez la pression du serveur
  • Améliorez la réutilisabilité des connexions et un accès utilisateur efficace

Méthode codée en dur:

  • Importez le lien du package jar:

https://pan.baidu.com/s/1lHnZJ-uPbEVwOuodV8poHA 

Code d'extraction: n04c

  • Créer un objet
  • Configurez les quatre paramètres de base de la connexion à la base de données (pilote, url, nom d'utilisateur, mot de passe)
  • Définir d'autres paramètres (nombre maximum de connexions, nombre minimum de connexions inactives, temps d'attente maximum pour l'obtention des connexions)
  • Obtenir une connexion via un objet de pool de connexions
  • Utiliser la connexion
  • Appelle la connexion, close () peut retourner la connexion
public class DRUIDDemo {
    @Test
    //硬编码,所有的配置都写到java代码中
    public void test1() throws SQLException {
        //1. 创建对象
        DruidDataSource ds = new DruidDataSource();

        //2. 设置数据库连接的4个基本参数(驱动,url,username,password)
        ds.setDriverClassName("com.mysql.jdbc.Driver");
        ds.setUrl("jdbc:mysql:///student");
        ds.setUsername("root");
        ds.setPassword("1234");

        //3. 设置其他的参数(最大连接的数量,最小连接空闲数量,获取连接最大等待时间)
        ds.setMaxActive(10);
        ds.setMinIdle(2);
        ds.setMaxWait(2000);

        //获取11个连接 ,会出现重复的连接
        for (int i = 1; i <12 ; i++) {
            //4. 通过连接池对象获取连接
            Connection conn = ds.getConnection();
            //5. 使用连接
            System.out.println(conn);

            if (i%7==0){
                //6. 调用连接close()就可以归还连接
                conn.close();
            }
        }
    }
}

Extraire des classes d'outils et utiliser des fichiers de configuration pour créer des pools de connexions

Outils:

package com.james.b_utils;

import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;

/**
 * 连接池的工具类
 * 1.获得连接
 * 2.释放资源(归还连接)
 */
public class DruidUtils {
    //1.准备数据源
    private static DataSource dataSource = null ;

    //2.static静态代码块初始化连接池
    static {
        try {
            //加载流
            InputStream is = DruidUtils.class.getClassLoader().getResourceAsStream("db.properties");
            //创建properties
            Properties properties = new Properties();
            //加载数据
            properties.load(is);
            //实例化连接池
            dataSource = DruidDataSourceFactory.createDataSource(properties);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 从池中获得连接
     * @return
     * @throws SQLException
     */
    public static Connection getConnection() throws SQLException {
        return dataSource.getConnection();
    }
}

fichier de configuration xml (sous le dossier src):

#此处的properties 的key不能瞎写
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql:///student
username=root
password=root
initialSize=3
maxActive=10
maxWait=3000
package com.james.b_utils;
import java.sql.Connection;
import java.sql.SQLException;
public class TestDemo {
    public static void main(String[] args) throws SQLException {
        for(int i = 1 ; i <= 11 ; i++ ){
            Connection connection = DruidUtils.getConnection();
            System.out.println(i+"@@"+connection);
            if(i==5){
                //归还第五个连接
                connection.close();//连接池对close方法都进行重写了
            }
        }
    }
}

 

Je suppose que tu aimes

Origine blog.csdn.net/weixin_43267344/article/details/108795662
conseillé
Classement