índice
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
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ãoSintaxe: jdbc: mysql: // endereço ip (nome de domínio): número da porta / nome do banco de dadosDetalhes: 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 dadosusuário : nome do usuário do banco de dadossenha : 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方法都进行重写了
}
}
}
}