Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Código fornecido no vídeo nunca foi testado!

Essa classe foi baixada na primeira atividade da primeira aula, link: https://cursos.alura.com.br/course/persistencia-de-objetos-com-jpa-hibernate/task/48614

Na classe BD do projeto contas-jbdc tem esse código aqui:

package br.com.caelum.financas.jdbc;

import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;

public class BD {

    private Connection connection;

    public BD(Connection connection) {
        this.connection = connection;
    }

    public void geraTabelaContas() {

        try {
            String schema = " CREATE TABLE Conta ( id INTEGER IDENTITY, titular VARCHAR(256), numero VARCHAR(256), "
                    + "banco VARCHAR(256), agencia VARCHAR(256),  )";
            Statement statement = this.connection.createStatement();
            statement.execute(schema);
        } catch (SQLException e) {
            // ignora se a tabela já existe
        }

    }

}

Notem que na linha do SQL tem uma virgula e nenhum termo depois, além de que o integer indentity não foi considerado um parâmetro válido pro mysql.

Essa virgula impede que o codigo seja executado, mas a má pratica de alguém acabou por fazer um catch e jogar todas as exceções fora, até as que acusariam os erros de SQL. Então isso me prova que esse código provavelmente criado por um instrutor nunca sequer foi testado.

Favor corrigir esse arquivo!

Segue a minha correção para o problema:

package br.com.caelum.financas.jdbc;

import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;

public class BD {

    private Connection connection;

    public BD(Connection connection) {
        this.connection = connection;
    }

    public void geraTabelaContas() {

        try {
            String schema = " CREATE TABLE Conta ( id INTEGER primary key auto_increment, titular VARCHAR(256), numero VARCHAR(256), "
                    + "banco VARCHAR(256), agencia VARCHAR(256)  )";
            Statement statement = this.connection.createStatement();
            statement.execute(schema);
        } catch (SQLException e) {
            if (e.getErrorCode() == 1050) {
            } else {
                throw new RuntimeException(e);
            }
        }

    }

}

Desta maneira somente as exceções do tipo "essa tabela já existe" serão ignoradas, e erros de sintaxe e banco vão ser jogadas pra frente.

1 resposta
solução!

Oi Murilo, tudo bem?

Você tem toda razão, já notifiquei os instrutores para analisarem esse problema ;)

Obrigado pelo feedback.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software