[JDBC] JDBC e pool de conexão

índice

Visão geral do JDBC

Etapas de implementação JDBC

Introdução às APIs relacionadas em JDBC

    DriverManager: objeto de gerenciamento da unidade

    Conexão: objeto de conexão de banco de dados

    Instrução: execute o objeto SQL

    ResultSet: objeto de conjunto de resultados

    PreparedStatement: executa o objeto SQL

Pool de conexão de druida

Maneira codificada:

Extraia classes de ferramentas e use arquivos de configuração para criar pools de conexão


Visão geral do JDBC

    JDBC: Java DataBase Connectivity. Sua função é operar bancos de dados através de Java em países estrangeiros . Em essência, ele define um conjunto de regras (interfaces) para operar todos os bancos de dados relacionais e, em seguida, cada fabricante de banco de dados implementa esse conjunto de interfaces, fornecendo O banco de dados direciona o pacote jar e, em seguida, usamos esta interface (JDBC) para programar para direcionar as classes de implementação no pacote jar

Etapas de implementação JDBC

    Antes de implementar o JDBC, você primeiro precisa importar o pacote jar (mysql-connection-java-5.1.37-bin) e, em seguida, começar a executar a operação de seis etapas do JDBC.

link do pacote jar:

Link: https://pan.baidu.com/s/1LsyTxuoDGrOh2cqNt9UfaQ 
Código de extração: nfn8

 

  • Registrar motorista
  • Obter objeto de conexão de banco de dados, conexão
  • Definir SQL
  • Obtenha o objeto que executa a instrução SQL, instrução
  • Execute sql, receba o resultado retornado
  • resultado do processo
  • Liberar recursos 

 

Código do caso:

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

Introdução às APIs relacionadas em JDBC

    DriverManager: objeto de gerenciamento da unidade

efeito:

  • Registrar motorista

   static void registerDriver (driver do driver):

   Registre-se com o driver fornecido DriverManager

  Escreva o código usando (classe de carregamento dinâmico): Class.forName ("com.mysql.jdbc.Driver").

   Ao visualizar o código-fonte, verifica-se que existem blocos de código estático na classe com.mysql.jdbc.Driver

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

O pacote jar do driver após MySQL5 pode omitir a etapa de registro do driver

  • Obter conexão de banco de dados
方法: conexão estática getConnection (String url, String usuário, String senha)
parâmetro:
    url : especifique o caminho da conexão
        Sintaxe: jdbc: mysql: // endereço ip (nome de domínio): número da porta / nome do banco de dados
        Detalhes: Se você estiver se conectando a um servidor mysql local, e a porta padrão do servidor mysql é 3306, o url pode ser abreviado: jdbc: mysql: // nome do banco de dados
    usuário : nome do usuário do banco de dados
    senha : senha do banco de dados

    Conexão: objeto de conexão de banco de dados

efeito:

  • Obter objeto SQL executado

declaração createStatement ()

PreparedStatement prepareStatement (String sql)

  • Assuntos de gestão

Iniciar transação: setAutoCommit (boolean autoCommit) chama este método para definir o parâmetro como falso, ou seja, iniciar a transação

Confirme a transação: commit ()

Reverter a transação: rollback ()

    Instrução: execute o objeto SQL

  • Boolean execute (String sql): pode executar qualquer SQL   

  • int executeUpdate (String sql): executa a instrução DML (adição, exclusão, modificação) e o valor de retorno é o número de linhas afetadas.Isso determina se a instrução DML é executada com êxito.

  • ResultSet executeQuery (String SQL): execute a instrução DQL (consulta)

    ResultSet: objeto de conjunto de resultados

  • boolean next (): O cursor desce uma linha para determinar se o final atual da última linha (se há dados), se houver, retorna falso, caso contrário, retorna verdadeiro
  • getXxxx (parâmetro): Obter dados
    • Xxx: representa o tipo de dados, como getInt (int / String), getString (int / String)
    • parâmetro
      • int representa o número da coluna, começando em 1,
      • String: representa o nome da coluna     
  • Nota
    • Etapas para uso
      • O cursor desce uma linha
      • Determine se há dados
      • recuperar dados

    PreparedStatement: executa o objeto SQL

{Impedir injeção de SQL, mais eficiente}
  • Problema de injeção de SQL: ao unir SQL, algumas palavras-chave especiais SQL participam da união de strings, o que causará problemas de segurança
  • Resolva o problema de injeção de SQL, use o objeto PreparedStatemet para resolver
  • SQL pré-compilado: parâmetro usado? Como um espaço reservado
  • degrau
    • Importe o pacote jar do driver, mysql-connector-java-5.1.37-bin.jar
    • Registrar motorista
    • Obtenha o objeto de conexão de banco de dados Connection
    • Definir SQL
      • Nota: os parâmetros SQL usam? Como um espaço reservado, ----> select * from user where username =? And password =?
    • Atribuir?
      • Método ---> setXxx (parâmetro 1, parâmetro 2)
        • Parâmetro 1: A codificação da posição começa em 1
        • Parâmetro 2: o valor de?
    • Execute SQL, receba resultados retornados, não há necessidade de passar parâmetros
    • resultado do processo
    • Liberar recursos

Código de caso do pacote inicial JDBC:

Arquivo de configuração:

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

Pool de conexão de druida

    O pool de conexão é um contêiner para armazenar o banco de dados. Quando o sistema é inicializado, o contêiner é criado. O contêiner se aplicará a alguns objetos de conexão. Quando o usuário acessar o banco de dados, o objeto de conexão será obtido do contêiner. Depois que o usuário acessar o banco de dados, o objeto de conexão será retornado para recipiente.

vantagem:

  • Economize recursos e reduza a pressão do servidor
  • Melhore a reutilização da conexão e o acesso do usuário eficiente

Maneira codificada:

  • Importe o link do pacote jar:

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

Código de extração: n04c

  • Criar objeto
  • Configure os quatro parâmetros básicos de conexão de banco de dados (driver, url, nome de usuário, senha)
  • Defina outros parâmetros (o número máximo de conexões, o número mínimo de conexões inativas, o tempo máximo de espera para obter conexões)
  • Obter conexão por meio de objeto de pool de conexão
  • Use conexão
  • Chame a conexão, close () pode retornar a conexão
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();
            }
        }
    }
}

Extraia classes de ferramentas e use arquivos de configuração para criar pools de conexão

Ferramentas:

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

arquivo de configuração xml (na pasta 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方法都进行重写了
            }
        }
    }
}

 

Acho que você gosta

Origin blog.csdn.net/weixin_43267344/article/details/108795662
Recomendado
Clasificación