Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

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

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.

3 respostas

Oi Murilo, tudo bem?

Qual link você utilizou para baixar esse projeto com o bug na query?

Desculpa, esqueci de informar. Na primeira atividade da primeira aula, link:

https://cursos.alura.com.br/course/persistencia-de-objetos-com-jpa-hibernate/task/48614

solução!

Fui informado que os instrutores já foram notificados! Caso ainda não encontrar a solução, eu consegui utilizar o meu código mesmo. Obrigado