1
resposta

Não está rodando o código - nem aparece o Javaaplication

Alguém poderia me mostrar o erro:

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class CategoriaDAO {

    private Connection connection;

    public CategoriaDAO(Connection con) {        
        this.connection = con;
    }

    public List<Categoria> listar() throws SQLException {                
        List<Categoria> categorias = new ArrayList<>();

        System.out.println("Executando a query de listar categoria");

        String sql = "SELECT ID, NOME FROM CATEGORIA";

        try(PreparedStatement pstm = connection.prepareStatement(sql)) {            
            pstm.execute();

            try(ResultSet rst = pstm.getResultSet()) {
                while(rst.next()) {
                    Categoria categoria = new Categoria(rst.getInt(1), rst.getString(2));

                    categorias.add(categoria);
                }
            }
        }
        return categorias;
    }

    public List<Categoria> listarComProdutos() throws SQLException {
        Categoria ultima = null;
        List<Categoria> categorias = new ArrayList<>();

        System.out.println("Executando a query de listar categoria");

        String sql = "SELECT C.ID, C.NOME, P.ID, P.NOME, P.DESCRICAO, FROM CATEGORIA C INNER JOIN" 
                        + " PRODUTO P ON C.ID = P.CATEGORIA_ID";

        try(PreparedStatement pstm = connection.prepareStatement(sql)) {            
            pstm.execute();

            try(ResultSet rst = pstm.getResultSet()) {
                while(rst.next()) {
                    if(ultima == null || ultima.getNome().equals(rst.getString(2))) {
                    Categoria categoria = new Categoria(rst.getInt(1), rst.getString(2));
                    ultima = categoria;
                    categorias.add(categoria);
                    }
                }
            }
        }
        return categorias;
    }
}

Está aparecendo esse erro:

Exception in thread "main" java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM CATEGORIA C INNER JOIN PRODUTO P ON C.ID = P.CATEGORIA_ID' at line 1 at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:120) at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97) at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:953) at com.mysql.cj.jdbc.ClientPreparedStatement.execute(ClientPreparedStatement.java:370) at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.execute(NewProxyPreparedStatement.java:67) at CategoriaDAO.listarComProdutos(CategoriaDAO.java:47) at TestaListagemDeCategorias.main(TestaListagemDeCategorias.java:11)

1 resposta

seu trecho de código com erro: String sql = "SELECT C.ID, C.NOME, P.ID, P.NOME, P.DESCRICAO, FROM CATEGORIA C INNER JOIN"

                    + " PRODUTO P ON C.ID = P.CATEGORIA_ID";

trecho de código corrigido: String sql = "SELECT C.ID, C.NOME, P.ID, P.NOME, P.DESCRICAO FROM CATEGORIA C INNER JOIN"

                    + " PRODUTO P ON C.ID = P.CATEGORIA_ID";

Ocorre este erro de sintaxe, já que, tem uma virgula próximo do FROM.