Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

11
respostas

Tabela 'agendamentoemaildb.AgendamentoEmail' não existe

Olá a todos!

Ao acessar a aplicação, recebo o seguinte erro:

Caused by: java.sql.SQLSyntaxErrorException: Table 'agendamentoemaildb.AgendamentoEmail' doesn't exist
    at com.mysql@8.0.20//com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:120)
    at com.mysql@8.0.20//com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
    at com.mysql@8.0.20//com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
    at com.mysql@8.0.20//com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:953)
    at com.mysql@8.0.20//com.mysql.cj.jdbc.ClientPreparedStatement.executeQuery(ClientPreparedStatement.java:1003)
    at org.jboss.ironjacamar.jdbcadapters@1.4.23.Final//org.jboss.jca.adapters.jdbc.WrappedPreparedStatement.executeQuery(WrappedPreparedStatement.java:504)
    at org.hibernate@5.3.18.Final//org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:60)

Porém, a tabela existe.

Alguém poderia me ajudar resolver esse problema, por gentileza?

11 respostas

Olá, José. Tudo bom? A tabela existe na database agendamentoemaildb?

Execute estes comandos no seu MySQL.

1º - USE agendamentoemaildb;

2º - SHOW TABLES;

E cole o resultado aqui para nós por favor. =)

Olá, Professor! Estou bem :), e você?

Segue o resultado solicitado:

mysql> use agendamentoemaildb;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+------------------------------+
| Tables_in_agendamentoemaildb |
+------------------------------+
| agendamentoemail             |
+------------------------------+
1 row in set (0.00 sec)

To bem também =)

Legal!! Como você está usando a sua string de conexão no momento de configurar o datasource? Você pode nos fornecer?

Sim.

Connection URL: jdbc:mysql://localhost:3306/agendamentoemaildb

Você chegou a testar a conexão no wildfly? Se sim, o erro que ele dá é o mesmo informado acima?

Eu testei a conexão no console do wildfly e conectou com sucesso! O erro acima aparece quando tento acessar a aplicação via browser. :(

Entendi. O seu persistence.xml está apontando para o datasource correto? Você já configurou isso? E sua entidade AgendamentoEmail está com todas as anotações JPA necessárias? Vamos ter que verificar todos estes pontos para tentar descobrir o que pode ser =)

Sim, aparentemente está tudo configurado corretamente. =( Vou compartilhar o código abaixo:

persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xml>
<persistence>
    <persistence-unit name="AgendamentoEmailDS">
        <jta-data-source>java:/AgendamentoEmailDS</jta-data-source>
    </persistence-unit>
</persistence>

AgendamentoEmail.java

package br.com.alura.entidade;

import java.io.Serializable;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class AgendamentoEmail implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String email;

    private String assunto;

    private String mensagem;

    private Boolean agendado;

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getAssunto() {
        return assunto;
    }

    public void setAssunto(String assunto) {
        this.assunto = assunto;
    }

    public String getMensagem() {
        return mensagem;
    }

    public void setMensagem(String mensagem) {
        this.mensagem = mensagem;
    }

    public Boolean getAgendado() {
        return agendado;
    }

    public void setAgendado(Boolean agendado) {
        this.agendado = agendado;
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((id == null) ? 0 : id.hashCode());
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        AgendamentoEmail other = (AgendamentoEmail) obj;
        if (id == null) {
            if (other.id != null)
                return false;
        } else if (!id.equals(other.id))
            return false;
        return true;
    }
}

Estranho. Se na console do wildfly está fechando a conexão, a única coisa que eu vejo que poderia ocasionar o erro, seria o JNDI do persistence.xml está apontando para um datasource que aponta para uma database que não tem a tabela AgendamentoEmail.

Você pode me informar todas as informações inseridas no cadastro do seu datasource?

Olá, Professor! Desculpa pela demora para responder, não foi possível responder antes =(

Essas são as informações informadas na configuração do meu datasource:

Name AgendamentoEmailDS

JNDI Name java:/AgendamentoEmailDS

Connection URL jdbc:mysql://localhost:3306/agendamentoemaildb

Driver Name mysql

User Name ●●●●●●

Password ●●●●●●