DEV Community

Cover image for CRUD Java, MySQL e JDBC
Brayan Monteiro
Brayan Monteiro

Posted on

CRUD Java, MySQL e JDBC

Vou criar um guia CRUD (Create, Read, Update, Delete) em Java puro (usando JDBC para conexão com banco de dados). Usaremos o MySQL como exemplo, mas você pode adaptar para outros bancos.


Pré-requisitos

  1. Banco de dados MySQL instalado.
  2. Driver JDBC do MySQL (arquivo mysql-connector-java-X.X.XX.jar).
  3. Java 8 ou superior.

Passo 1: Configurar o Banco de Dados

Crie uma tabela usuarios no MySQL:

CREATE DATABASE crud_java;
USE crud_java;

CREATE TABLE usuarios (
    id INT PRIMARY KEY AUTO_INCREMENT,
    nome VARCHAR(50) NOT NULL,
    email VARCHAR(50) NOT NULL UNIQUE,
    idade INT
);
Enter fullscreen mode Exit fullscreen mode

Passo 2: Estrutura do Projeto Java

Crie um projeto Java e adicione o driver JDBC ao classpath (dependência).

src
└── main
    └── java
        ├── ConnectionFactory.java
        ├── UsuarioDAO.java
        └── Main.java
Enter fullscreen mode Exit fullscreen mode

Passo 3: Código Java

Classe ConnectionFactory (Conexão com o Banco)

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class ConnectionFactory {
    private static final String URL = "jdbc:mysql://localhost:3306/crud_java";
    private static final String USER = "root";
    private static final String PASSWORD = "sua_senha";

    public static Connection getConnection() {
        try {
            return DriverManager.getConnection(URL, USER, PASSWORD);
        } catch (SQLException e) {
            throw new RuntimeException("Erro ao conectar ao banco de dados", e);
        }
    }
}
Enter fullscreen mode Exit fullscreen mode

Classe UsuarioDAO (Operações CRUD)

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class UsuarioDAO {

    // CREATE
    public void create(Usuario usuario) {
        String sql = "INSERT INTO usuarios (nome, email, idade) VALUES (?, ?, ?)";
        try (Connection conn = ConnectionFactory.getConnection();
             PreparedStatement stmt = conn.prepareStatement(sql)) {

            stmt.setString(1, usuario.getNome());
            stmt.setString(2, usuario.getEmail());
            stmt.setInt(3, usuario.getIdade());
            stmt.executeUpdate();

        } catch (SQLException e) {
            throw new RuntimeException("Erro ao criar usuário", e);
        }
    }

    // READ
    public List<Usuario> read() {
        String sql = "SELECT * FROM usuarios";
        List<Usuario> usuarios = new ArrayList<>();

        try (Connection conn = ConnectionFactory.getConnection();
             PreparedStatement stmt = conn.prepareStatement(sql);
             ResultSet rs = stmt.executeQuery()) {

            while (rs.next()) {
                Usuario usuario = new Usuario(
                    rs.getInt("id"),
                    rs.getString("nome"),
                    rs.getString("email"),
                    rs.getInt("idade")
                );
                usuarios.add(usuario);
            }

        } catch (SQLException e) {
            throw new RuntimeException("Erro ao listar usuários", e);
        }
        return usuarios;
    }

    // UPDATE
    public void update(Usuario usuario) {
        String sql = "UPDATE usuarios SET nome = ?, email = ?, idade = ? WHERE id = ?";
        try (Connection conn = ConnectionFactory.getConnection();
             PreparedStatement stmt = conn.prepareStatement(sql)) {

            stmt.setString(1, usuario.getNome());
            stmt.setString(2, usuario.getEmail());
            stmt.setInt(3, usuario.getIdade());
            stmt.setInt(4, usuario.getId());
            stmt.executeUpdate();

        } catch (SQLException e) {
            throw new RuntimeException("Erro ao atualizar usuário", e);
        }
    }

    // DELETE
    public void delete(int id) {
        String sql = "DELETE FROM usuarios WHERE id = ?";
        try (Connection conn = ConnectionFactory.getConnection();
             PreparedStatement stmt = conn.prepareStatement(sql)) {

            stmt.setInt(1, id);
            stmt.executeUpdate();

        } catch (SQLException e) {
            throw new RuntimeException("Erro ao deletar usuário", e);
        }
    }
}
Enter fullscreen mode Exit fullscreen mode

Classe Usuario (Modelo)

public class Usuario {
    private int id;
    private String nome;
    private String email;
    private int idade;

    // Construtor, getters e setters
    public Usuario(int id, String nome, String email, int idade) {
        this.id = id;
        this.nome = nome;
        this.email = email;
        this.idade = idade;
    }

    // Getters e Setters
    public int getId() { return id; }
    public String getNome() { return nome; }
    public String getEmail() { return email; }
    public int getIdade() { return idade; }
}
Enter fullscreen mode Exit fullscreen mode

Classe Main (Teste)

import java.util.List;

public class Main {
    public static void main(String[] args) {
        UsuarioDAO usuarioDAO = new UsuarioDAO();

        // CREATE
        Usuario novoUsuario = new Usuario(0, "João Silva", "joao@email.com", 30);
        usuarioDAO.create(novoUsuario);

        // READ
        List<Usuario> usuarios = usuarioDAO.read();
        for (Usuario u : usuarios) {
            System.out.println(u.getId() + " - " + u.getNome());
        }

        // UPDATE
        Usuario usuarioAtualizado = new Usuario(1, "João Silva Atualizado", "joao.novo@email.com", 35);
        usuarioDAO.update(usuarioAtualizado);

        // DELETE
        usuarioDAO.delete(1);
    }
}
Enter fullscreen mode Exit fullscreen mode

Passo 4: Execução

  1. Adicione o driver JDBC ao classpath (no Eclipse: Botão direito no projeto > Build Path > Configure Build Path > Libraries > Add JARs).
  2. Execute a classe Main.

Considerações

  1. Tratamento de Exceções: Use try-with-resources para garantir que conexões sejam fechadas automaticamente.
  2. Segurança: Use PreparedStatement para evitar SQL injection.
  3. Transações: Para operações críticas, adicione controle transacional com commit() e rollback().

Este é um exemplo básico. Para projetos reais, considere usar:

  • Frameworks como Hibernate (JPA) ou Spring JDBC.
  • Pool de conexões (ex: HikariCP).
  • Tratamento mais robusto de exceções.

Top comments (0)