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