JDBC: Conectando ao Banco de Dados MySQL e Implementando Operações CRUD

Este tutorial apresenta como utilizar JDBC (Java Database Connectivity) para coenctar-se a um banco de dados MySQL e executar as operações básicas de manipulação de dados: Criação, Lietura, Atualização e Exclusão (CRUD). Pré-requisitos

Antes de iniciar, certifique-se de ter: - Driver JDBC do MySQL (mysql-connector-java)

  • Banco de dados MySQL configurado
  • Projeto Java com as bibliotecas necessárias
  1. Estabelecendo Conexão com o Banco de Dados

1.1 Primeira Abordagem - Conexão Reutilizável

Esta abordagem utiliza uma classe utilitária que gerencia a conexão de forma centralizada. ``` import java.sql.*;

public class DatabaseConnector { private static final String DRIVER = "com.mysql.cj.jdbc.Driver"; private static final String URL = "jdbc:mysql://localhost:3306/escola"; private static final String USUARIO = "root"; private static final String SENHA = "sua_senha_aqui";

static {
    try {
        Class.forName(DRIVER);
    } catch (ClassNotFoundException e) {
        throw new RuntimeException("Driver JDBC não encontrado", e);
    }
}

public static Connection obterConexao() {
    try {
        return DriverManager.getConnection(URL, USUARIO, SENHA);
    } catch (SQLException e) {
        e.printStackTrace();
        return null;
    }
}

public static void fecharRecursos(ResultSet rs, PreparedStatement pstm, Connection conn) {
    try {
        if (rs != null) rs.close();
        if (pstm != null) pstm.close();
        if (conn != null) conn.close();
    } catch (SQLException e) {
        throw new RuntimeException("Erro ao fechar recursos", e);
    }
}

public static void main(String[] args) {
    Connection conn = DatabaseConnector.obterConexao();
    System.out.println("Conexão estabelecida: " + (conn != null));
}

}


### 1.2 Segunda Abordagem - Conexão Direta

Esta abordagem é mais simples, porém menos indicada para aplicações reais. ```
import java.sql.*;

public class ConsultaSimples {
    public static void main(String[] args) throws Exception {
        Class.forName("com.mysql.cj.jdbc.Driver");
        
        String url = "jdbc:mysql://localhost:3306/escola";
        String usuario = "root";
        String senha = "sua_senha_aqui";
        
        Connection conn = DriverManager.getConnection(url, usuario, senha);
        Statement stmt = conn.createStatement();
        
        String sql = "SELECT id, nome, salario, idade FROM funcionarios";
        ResultSet rs = stmt.executeQuery(sql);
        
        while (rs.next()) {
            int id = rs.getInt("id");
            String nome = rs.getString("nome");
            double salario = rs.getDouble("salario");
            int idade = rs.getInt("idade");
            System.out.println(id + "\t" + nome + "\t" + salario + "\t" + idade);
        }
        
        rs.close();
        stmt.close();
        conn.close();
    }
}

  1. Modelo de Dados

Crie uma classe POJO para representar a entidade do banco de dados. ``` public class Funcionario { private int id; private String nome; private double salario; private int idade;

public int getId() { return id; }
public void setId(int id) { this.id = id; }

public String getNome() { return nome; }
public void setNome(String nome) { this.nome = nome; }

public double getSalario() { return salario; }
public void setSalario(double salario) { this.salario = salario; }

public int getIdade() { return idade; }
public void setIdade(int idade) { this.idade = idade; }

}


3. Inserção de Dados
--------------------

import java.sql.*;

public class OperacaoInserir { public boolean inserir(Funcionario func) { Connection conn = DatabaseConnector.obterConexao(); String sql = "INSERT INTO funcionarios VALUES (?, ?, ?, ?)";

    try {
        PreparedStatement pstm = conn.prepareStatement(sql);
        pstm.setInt(1, func.getId());
        pstm.setString(2, func.getNome());
        pstm.setDouble(3, func.getSalario());
        pstm.setInt(4, func.getIdade());
        
        boolean resultado = pstm.executeUpdate() > 0;
        DatabaseConnector.fecharRecursos(null, pstm, conn);
        return resultado;
    } catch (SQLException e) {
        throw new RuntimeException("Erro ao inserir dados", e);
    }
}

public static void main(String[] args) {
    Funcionario func = new Funcionario();
    func.setId(10);
    func.setNome("Pedro");
    func.setSalario(4500.00);
    func.setIdade(28);
    
    OperacaoInserir operacao = new OperacaoInserir();
    System.out.println(operacao.inserir(func) ? "Inserção realizada" : "Falha na inserção");
}

}


4. Atualização de Dados
-----------------------

import java.sql.*;

public class OperacaoAtualizar { public boolean atualizar(Funcionario func) { Connection conn = DatabaseConnector.obterConexao(); String sql = "UPDATE funcionarios SET nome=?, salario=?, idade=? WHERE id=?";

    try {
        PreparedStatement pstm = conn.prepareStatement(sql);
        pstm.setString(1, func.getNome());
        pstm.setDouble(2, func.getSalario());
        pstm.setInt(3, func.getIdade());
        pstm.setInt(4, func.getId());
        
        boolean resultado = pstm.executeUpdate() > 0;
        DatabaseConnector.fecharRecursos(null, pstm, conn);
        return resultado;
    } catch (SQLException e) {
        throw new RuntimeException("Erro ao atualizar dados", e);
    }
}

public static void main(String[] args) {
    Funcionario func = new Funcionario();
    func.setId(10);
    func.setNome("Paulo");
    func.setSalario(5200.00);
    func.setIdade(32);
    
    OperacaoAtualizar operacao = new OperacaoAtualizar();
    System.out.println(operacao.atualizar(func) ? "Atualização realizada" : "Falha na atualização");
}

}


5. Exclusão de Dados
--------------------

import java.sql.*;

public class OperacaoExcluir { public boolean excluir(int id) { Connection conn = DatabaseConnector.obterConexao(); String sql = "DELETE FROM funcionarios WHERE id=?";

    try {
        PreparedStatement pstm = conn.prepareStatement(sql);
        pstm.setInt(1, id);
        
        boolean resultado = pstm.executeUpdate() > 0;
        DatabaseConnector.fecharRecursos(null, pstm, conn);
        return resultado;
    } catch (SQLException e) {
        throw new RuntimeException("Erro ao excluir dados", e);
    }
}

public static void main(String[] args) {
    OperacaoExcluir operacao = new OperacaoExcluir();
    System.out.println(operacao.excluir(10) ? "Exclusão realizada" : "Falha na exclusão");
}

}


6. Consulta de Dados
--------------------

### 6.1 Consultar Registro Específico

import java.sql.*;

public class OperacaoConsultar { public Funcionario buscarPorId(int id) { Connection conn = DatabaseConnector.obterConexao(); String sql = "SELECT * FROM funcionarios WHERE id=?";

    try {
        PreparedStatement pstm = conn.prepareStatement(sql);
        pstm.setInt(1, id);
        
        ResultSet rs = pstm.executeQuery();
        Funcionario func = new Funcionario();
        
        if (rs.next()) {
            func.setId(rs.getInt(1));
            func.setNome(rs.getString(2));
            func.setSalario(rs.getDouble(3));
            func.setIdade(rs.getInt(4));
        }
        
        DatabaseConnector.fecharRecursos(rs, pstm, conn);
        return func;
    } catch (SQLException e) {
        e.printStackTrace();
        return null;
    }
}

public static void main(String[] args) {
    OperacaoConsultar operacao = new OperacaoConsultar();
    Funcionario func = operacao.buscarPorId(1);
    if (func != null) {
        System.out.println(func.getId() + "\t" + func.getNome() + "\t" + func.getSalario());
    }
}

}


### 6.2 Consultar Múltiplos Registros

import java.sql.; import java.util.;

public class OperacaoListar { public List<Funcionario> listarTodos() { Connection conn = DatabaseConnector.obterConexao(); String sql = "SELECT * FROM funcionarios";

    try {
        PreparedStatement pstm = conn.prepareStatement(sql);
        ResultSet rs = pstm.executeQuery();
        
        List<Funcionario> lista = new ArrayList<>();
        
        while (rs.next()) {
            Funcionario func = new Funcionario();
            func.setId(rs.getInt(1));
            func.setNome(rs.getString(2));
            func.setSalario(rs.getDouble(3));
            func.setIdade(rs.getInt(4));
            lista.add(func);
        }
        
        DatabaseConnector.fecharRecursos(rs, pstm, conn);
        return lista;
    } catch (SQLException e) {
        e.printStackTrace();
        return null;
    }
}

public static void main(String[] args) {
    OperacaoListar operacao = new OperacaoListar();
    List<Funcionario> lista = operacao.listarTodos();
    
    for (Funcionario func : lista) {
        System.out.println(func.getId() + " - " + func.getNome());
    }
}

}


Considerações Finais
--------------------

- Sempre utilize PreparedStatement para evitar SQL Injection
- Feche os recursos (Connection, Statement, ResultSet) sempre após o uso
- Utilize blocos try-with-resources quando possível
- Considere utilizar pools de conexão para aplicações de alto desempenho

</div>

Tags: java jdbc MySQL database CRUD

Publicado em 8-10 00:37