Pool de conexão de banco de dados (ferramentas c3p0 && druid && druid)

Pool de conexão de banco de dados (classe de ferramenta c3p0 + druid + druid)

Nota: Este experimento é para configurar o arquivo pom.xml para importar o pacote jar no projeto maven

  1. conceito

Pool de conexão de banco de dados: na verdade, um contêiner (coleção), um contêiner para armazenar conexões de banco de dados

Depois que o sistema é inicializado, o contêiner é criado e alguns objetos de conexão são aplicados no contêiner. Quando um usuário acessa o banco de dados, o objeto de conexão é obtido do contêiner. Depois que o usuário acessa o banco de dados, o objeto de conexão é retornado para o contêiner.

  1. beneficiar
  • economizar recursos
  • O acesso do usuário é mais eficiente
  1. Conscientização da interface DataSource
  1. javax.sql.DataSource
  2. A interface não possui uma classe de implementação específica, mas o fornecedor do driver implementa a interface durante o uso
DataSource 接口由驱动程序供应商实现。共有三种类型的实现
1.	基本实现 - 生成标准的 Connection 对象 
2.	连接池实现 - 生成自动参与连接池的 Connection 对象。此实现与中间层连接池管理器一起使用。 
3.	分布式事务实现 - 生成一个 Connection 对象,该对象可用于分布式事务,大多数情况下总是参与连接池。此实现与中间层事务管理器一起使用,大多数情况下总是与连接池管理器一起使用。 
4.	接口的方法(获取连接)
 Connection getConnection() 
          尝试建立与此 DataSource 对象所表示的数据源的连接。 
 Connection getConnection(String username, String password) 
          尝试建立与此 DataSource 对象所表示的数据源的连接。 
5.	归还链接:如果连接对象connection是从连接池中获取的,那么调用Connection.close()方法,则不会关闭连接了,而是归还连接给连接池。
  1. Tecnologia de pool de conexão de banco de dados C3P0
  1. Etapas para uso:

    1. Importar dependências c3p0
    <dependencies>
            <dependency>
                <groupId>com.mchange</groupId>
                <artifactId>mchange-commons-java</artifactId><!-- c3p0所依赖的jar包 -->
                <version>0.2.12</version>
            </dependency>
            <dependency>
                <groupId>com.mchange</groupId>
                <artifactId>c3p0</artifactId> <!-- 必要依赖 -->
                <version>0.9.5.2</version>
            </dependency>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId> <!-- 必要依赖 -->
                <version>5.1.6</version>
                <scope>runtime</scope> <!-- 只在运行时生效 -->
            </dependency>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
                <scope>test</scope>
            </dependency>
    </dependencies>
    
    1. Crie o arquivo de configuração c3p0-config.xml

    Nota: c3p0-config.xml deve ser colocado no diretório de recursos para cumprir os requisitos do diretório do projeto maven

    <c3p0-config>
        <!-- 使用默认的配置读取连接池对象 -->
        <default-config>
            <!--  连接参数 -->
            <property name="driverClass">com.mysql.jdbc.Driver</property>
            <property name="jdbcUrl">jdbc:mysql://localhost:3306/xskc</property>
            <property name="user">root</property>
            <property name="password">root</property>
    
            <!-- 连接池参数 -->
            <property name="initialPoolSize">5</property><!-- 初始池中连接数量 -->
            <property name="maxPoolSize">10</property><!-- 最大连接数量,超过此数量会报错 -->
            <property name="checkoutTimeout">3000</property><!-- 超时时间 -->
        </default-config>
    
        <named-config name="anotherc3p0"><!-- 指定名称的配置,可以在DataSource中指定名称调用此配置,而不再使用默认配置 -->
            <!--  连接参数 -->
            <property name="driverClass">com.mysql.jdbc.Driver</property>
            <property name="jdbcUrl">jdbc:mysql://localhost:3306/xskc</property>
            <property name="user">root</property>
            <property name="password">root</property>
    
            <!-- 连接池参数 -->
            <property name="initialPoolSize">5</property>
            <property name="maxPoolSize">8</property>
            <property name="checkoutTimeout">1000</property>
        </named-config>
    </c3p0-config>
    
    1. Use o pool de conexão C3P0
    package zhi.itlearn;
    
    import com.mchange.v2.c3p0.ComboPooledDataSource;
    
    import javax.sql.DataSource;
    import java.sql.Connection;
    import java.sql.SQLException;
    
    public class C3P0Utils {
           
           
        public static void main(String[] args) throws SQLException {
           
           
            //创建数据库连接池对象
            DataSource ds = new ComboPooledDataSource();
            //使用anotherc3p0连接池配置
            //DataSource ds2 = new ComboPooledDataSource("anotherc3p0");
            //获取连接对象
            Connection connection = ds.getConnection();
            //打印connection,测试是否有拿到连接对象
            System.out.println(connection);
        }
    }
    
  1. Tecnologia de pool de conexão de banco de dados Durid

Durid: tecnologia de implementação de pool de conexão de banco de dados, fornecida pela Alibaba

  1. Etapas para uso
  • Importar dependência de pacote jar
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.2.4</version>
</dependency>
  • Defina o arquivo de configuração (usando o arquivo de configuração de propriedades)

Nota: O arquivo de configuração de propriedades pode ter qualquer nome, mas precisa ser colocado na pasta de recursos.

Nomeado aqui: druid-config.properties

driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/xskc
username=root
password=root
initialSize=5
maxActive=10
maxWait=3000
  • Obtenha o objeto de pool de conexão de banco de dados, obtenha a conexão Connection: por meio da classe DruidDataSourceFactory
package zhi.itlearn;

import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.util.Properties;

public class DuridDemo {
      
      
    public static void main(String[] args) throws Exception {
      
      
        //加载配置文件
        Properties pro = new Properties();
        //通过类加载器获取资源文件,并返回字节流
        InputStream asStream = DuridDemo.class.getClassLoader().getResourceAsStream("duril-config.properties");
        //加载字节流
        pro.load(asStream);
        //获取连接池对象:通过DruidDataSourceFactory类
        DataSource source = DruidDataSourceFactory.createDataSource(pro);
        //获取连接
        Connection connection = source.getConnection();
        System.out.println(connection);
    }
}
  1. Defina a classe da ferramenta Durid: JDBCUtils.class
package zhi.itlearn;

import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

public class JDBCUtils {
     
     
    private static DataSource ds;
    
    static {
     
     
        try {
     
     
            //加载配置文件
            Properties pro = new Properties();
            pro.load(JDBCUtils.class.getClassLoader().getResourceAsStream("duril-config.properties"));
            //获得DataSource连接池对象
            ds = DruidDataSourceFactory.createDataSource(pro);
        } catch (IOException e) {
     
     
            e.printStackTrace();
        } catch (Exception e) {
     
     
            e.printStackTrace();
        }
    }
    
    public static DataSource getDateSource(){
     
     
        return ds;
    }
    
    public static Connection getConnection() throws SQLException {
     
     
        return ds.getConnection();
    }
    
    public static void close(Statement stat,Connection conn){
     
     
        close(null,stat,conn);
    }
    public static void close(ResultSet rs, Statement stat, Connection conn){
     
     
        if (rs!=null){
     
     
            try {
     
     
                rs.close();
            } catch (SQLException e) {
     
     
                e.printStackTrace();
            }
        }
        if (stat!=null){
     
     
            try {
     
     
                stat.close();
            } catch (SQLException e) {
     
     
                e.printStackTrace();
            }
        }
        if (conn!=null){
     
     
            try {
     
     
                conn.close(); //归还连接
            } catch (SQLException e) {
     
     
                e.printStackTrace();
            }
        }
    }
    
}
  1. Teste a classe da ferramenta JDBCUtils
package zhi.itlearn;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class JDBCUtilsTest {
     
     
    public static void main(String[] args) throws SQLException {
     
     
        Connection connection = JDBCUtils.getConnection();
        PreparedStatement statement = connection.prepareStatement("SELECT * FROM student WHERE sage = 19");
        ResultSet set = statement.executeQuery();
        while(set.next()){
     
     
            System.out.println(set.getString("sname"));
        }
        JDBCUtils.close(set,statement,connection);
    }
}

Acho que você gosta

Origin blog.csdn.net/qq_42278320/article/details/113001310
Recomendado
Clasificación