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 ●●●●●●