🚀 Capítulo 15: Introdução ao JDBC

🎯 Objetivo da Aula

Ao final desta aula, você será capaz de compreender o conceito de JDBC (Java Database Connectivity), configurar a conexão com um banco de dados relacional e realizar operações básicas de consulta e inserção de dados via código Java.


🏢 O Cenário Prático (Seu Desafio)

Você está desenvolvendo o backend para um servidor de GTA RP (Roleplay). O seu desafio é salvar os dados dos jogadores (Apelido, Dinheiro na conta e Nível de Procurado) em um Banco de Dados real, para que eles não percam o progresso quando saírem do jogo.


🧠 Fundamentos: A Teoria Traduzida

Até agora, salvamos dados em arquivos de texto. Mas para sistemas grandes, usamos Bancos de Dados Relacionais (como MySQL, PostgreSQL ou H2), que organizam os dados em tabelas (linhas e colunas).

  • JDBC: É a ponte que liga o seu programa Java ao Banco de Dados.
  • Driver: É o arquivo tradutor específico para cada banco (como o H2).
  • Connection: É a linha de comunicação aberta com o banco.
  • Statement: É o comando SQL que você envia para o banco.
  • ResultSet: É a resposta (tabela de dados) que o banco devolve.

Fluxo do JDBC

flowchart LR
    A["Programa Java"] -->|JDBC| B["Driver H2"]
    B -->|Linguagem SQL| C[("Banco de Dados")]

📖 Exemplo Guiado

Vamos conectar ao banco de dados H2 (um banco em memória que não precisa de instalação complexa) e criar a nossa tabela de jogadores.

🛠️ Passo a Passo para Criar o Projeto no VS Code

  1. Abra o VS Code.
  2. Pressione as teclas Ctrl + Shift + P.
  3. Digite Java: Create Java Project e pressione Enter.
  4. Selecione a opção No build tools.
  5. Escolha a pasta e digite o nome do projeto: gta-projeto.

📂 Estrutura Inicial de Pastas

Para esta aula, precisaremos do arquivo do driver do banco H2 (um arquivo .jar). Você deve baixá-lo neste link do Maven Central e colocá-lo dentro da pasta lib do seu projeto para que o VS Code o reconheça.

gta-projeto/
├── lib/
│   └── h2-2.2.224.jar (coloque o arquivo do driver aqui!)
└── src/
    └── App.java (pode apagar este arquivo)

Siga os passos para criar os arquivos dentro da pasta src:

  1. Crie o arquivo ConexaoBanco.java (para criar a tabela e inserir um dado):
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
 
public class ConexaoBanco {
    public static void main(String[] args) {
        // URL de conexão para o banco H2 em memória
        String url = "jdbc:h2:mem:gtadb;DB_CLOSE_DELAY=-1";
        
        try {
            // 1. Abre a conexão com usuário "sa" e sem senha
            Connection conn = DriverManager.getConnection(url, "sa", "");
            System.out.println("Conectado ao banco do GTA com sucesso!");
 
            // 2. Cria um objeto para enviar comandos
            Statement stmt = conn.createStatement();
 
            // 3. Executa o comando SQL para criar a tabela
            String sqlCriarTabela = "CREATE TABLE JOGADORES (" +
                                    "id INT AUTO_INCREMENT PRIMARY KEY, " +
                                    "nickname VARCHAR(50), " +
                                    "dinheiro DOUBLE, " +
                                    "nivel_procurado INT)";
            stmt.execute(sqlCriarTabela);
            System.out.println("Tabela JOGADORES criada!");
 
            // 4. Insere um jogador de teste
            String sqlInserir = "INSERT INTO JOGADORES (nickname, dinheiro, nivel_procurado) " +
                                "VALUES ('CJ_da_Massa', 5000.0, 3)";
            stmt.executeUpdate(sqlInserir);
            System.out.println("Jogador CJ inserido com sucesso!");
 
            conn.close(); // Fecha a conexão
        } catch (Exception e) {
            System.out.println("Erro na conexão: " + e.getMessage());
        }
    }
}

🕹️ Como Executar e Testar no VS Code

  1. Certifique-se de que o arquivo h2-2.2.224.jar está dentro da pasta lib/ do seu projeto.
  2. Abra o arquivo ConexaoGta.java.
  3. Clique em Run logo acima do método main.

Resultado Esperado:

Jogador CJ inserido com sucesso!


🛠️ Prática Obrigatória 1

Crie um programa chamado ListarJogadores.java. Ele deve conectar ao mesmo banco e usar o comando SQL SELECT * FROM JOGADORES para buscar todos os jogadores cadastrados. Use o ResultSet para ler e exibir o apelido e o dinheiro de cada um. (Dica: Como o banco em memória apaga ao fechar, você precisará recriar a tabela e inserir dados no mesmo código para testar a listagem!).

Resultado Esperado: Como o banco é recriado a cada execução, você deve inserir dados no mesmo código antes de listar.

SQLSaída Esperada no Console
SELECT * FROM JOGADORESApelido: CJ | Dinheiro: 1000.0

🛠️ Prática Obrigatória 2

Crie um programa chamado NovoJogador.java que peça para o usuário digitar o apelido e o dinheiro inicial via teclado, e insira esse novo jogador no banco de dados usando o comando SQL INSERT.

Resultado Esperado: O programa pedirá os dados e inserirá no banco.

EntradaSaída Esperada
”Ryder”, 500Jogador Ryder inserido com sucesso!

📤 Instruções de Entrega (GitHub Desktop + Microsoft Teams)

Neste curso, você entregará suas atividades enviando o código para o seu repositório no GitHub usando o aplicativo GitHub Desktop. Siga o passo a passo detalhado:

  1. Verifique a estrutura: Certifique-se de que sua estrutura de pastas final está idêntica à mostrada abaixo.
  2. Abra o GitHub Desktop: Certifique-se de que o repositório do seu curso está selecionado no canto superior esquerdo.
  3. Visualize as alterações: Na aba Changes (à esquerda), você verá todos os arquivos que criou ou modificou nesta aula.
  4. Faça o Commit:
    • No campo Summary (na parte inferior esquerda), digite uma mensagem curta descrevendo o que fez, ex: Finaliza atividades do Capítulo 15.
    • Clique no botão azul Commit to main (ou o nome da sua branch).
  5. Envie para a Nuvem (Push): No topo da tela, clique no botão Push origin. Isso enviará seu código do seu computador para o seu perfil no GitHub.
  6. ⚠️ IMPORTANTE (Repositório Público): Para que o professor consiga corrigir, o seu repositório no GitHub DEVE SER PÚBLICO. Repositórios privados não podem ser visualizados por quem não foi convidado.
  7. Como entregar no Microsoft Teams:
    • Copie o link do seu repositório no GitHub (ex: https://github.com/seu-usuario/seu-repositorio).
    • Abra a tarefa correspondente no Microsoft Teams.
    • Clique no botão Adicionar trabalho (ou Add work).
    • Selecione a opção Link no menu lateral.
    • Cole o link do GitHub no campo “Endereço Web” e digite um texto (ex: Meu Repositório) no campo “Texto a ser exibido”.
    • Clique em Anexar.
    • MUITO IMPORTANTE: Clique no botão Entregar (ou Turn in) no canto superior direito para concluir o envio!

📂 Estrutura Final de Pastas

gta-projeto/
├── lib/
│   └── h2-2.2.224.jar
└── src/
    ├── ConexaoBanco.java
    ├── ListarJogadores.java
    └── NovoJogador.java

💡 Checkpoint de Lógica

O que você acabou de fazer é a base de todo sistema comercial. Redes sociais, e-commerces e jogos online salvam tudo o que você faz em bancos de dados relacionais exatamente através de conexões JDBC como esta!


🔥 Desafio de Fixação (Opcional)

Crie um método ou programa que atualize o dinheiro de um jogador específico para um novo valor digitado pelo usuário (usando o comando SQL UPDATE).


🔑 Gabarito de Código/Fórmulas

Prática 1:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
 
public class ListarJogadores {
    public static void main(String[] args) {
        String url = "jdbc:h2:mem:gtadb;DB_CLOSE_DELAY=-1";
        try {
            Connection conn = DriverManager.getConnection(url, "sa", "");
            Statement stmt = conn.createStatement();
 
            // Recriando cenário para teste em memória
            stmt.execute("CREATE TABLE JOGADORES (id INT AUTO_INCREMENT, nickname VARCHAR(50), dinheiro DOUBLE)");
            stmt.executeUpdate("INSERT INTO JOGADORES (nickname, dinheiro) VALUES ('CJ', 5000.0)");
            stmt.executeUpdate("INSERT INTO JOGADORES (nickname, dinheiro) VALUES ('Sweet', 2000.0)");
 
            // Consulta
            ResultSet rs = stmt.executeQuery("SELECT * FROM JOGADORES");
            while (rs.next()) {
                System.out.println("Jogador: " + rs.getString("nickname") + " | Saldo: R$" + rs.getDouble("dinheiro"));
            }
            conn.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Prática 2:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.util.Scanner;
 
public class NovoJogador {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String url = "jdbc:h2:mem:gtadb;DB_CLOSE_DELAY=-1";
        
        try {
            System.out.print("Digite o Nickname: ");
            String nick = sc.nextLine();
            System.out.print("Digite o Dinheiro Inicial: ");
            double grana = sc.nextDouble();
 
            Connection conn = DriverManager.getConnection(url, "sa", "");
            Statement stmt = conn.createStatement();
 
            // Garante que a tabela existe (necessário pois o banco em memória zera a cada execução separada)
            stmt.execute("CREATE TABLE IF NOT EXISTS JOGADORES (id INT AUTO_INCREMENT, nickname VARCHAR(50), dinheiro DOUBLE)");
 
            String sql = "INSERT INTO JOGADORES (nickname, dinheiro) VALUES ('" + nick + "', " + grana + ")";
            stmt.executeUpdate(sql);
 
            
            System.out.println("Jogador inserido!");
            conn.close();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            sc.close();
        }
    }
}

Desafio:

// Exemplo de SQL para Update:
// String sql = "UPDATE JOGADORES SET dinheiro = 9999.0 WHERE nickname = 'CJ'";

Capitulo Anterior | Proximo Capitulo