Solucionado (ver solución)
Solucionado
(ver solución)
3
respuestas

[Duda] no puedo hacer funcionar el reporte

buenas, estoy a mitad del video y tengo un problema, creo que es con la sentencia de MySQL pero no logro darme cuenta, les comparto mi codigo y el error de consola


    public List<Categoria> listarConProductos() {
        List<Categoria>resultado=new ArrayList<>();

        try {
            var querySelect ="SELECT C.ID, C.NOMBRE, P.ID, P.NOMBRE, P.CANTIDAD "
                    + "FROM CATEGORIA  C"
                    + "INNER JOIN PRODUCTO P ON C.ID = P.CATEGORIA_ID";
            System.out.println(querySelect);

            final PreparedStatement statement = con.prepareStatement(querySelect);
            try (statement){
                final ResultSet resultset= statement.executeQuery();
                try(resultset){
                while(((ResultSet) resultado).next()) {
                    var categoria= new Categoria(resultset.getInt("ID"),
                            resultset.getString("NOMBRE"));

                    resultado.add(categoria);
                }
            };
        }
    }catch (SQLException e) {
            throw new RuntimeException(e);
            }
        return resultado;
    }

y los errores son estos

Exception in thread "AWT-EventQueue-0" java.lang.RuntimeException: java.sql.SQLSyntaxErrorException: Unknown column 'C.ID' in 'field list'
    at com.alura.jdbc.dao.CategoriaDAO.listarConProductos(CategoriaDAO.java:70)
    at com.alura.jdbc.controller.CategoriaController.cargaReporte(CategoriaController.java:22)
    at com.alura.jdbc.view.ReporteFrame.cargaReporte(ReporteFrame.java:48)
    at com.alura.jdbc.view.ReporteFrame.<init>(ReporteFrame.java:40)
    at com.alura.jdbc.view.ControlDeStockFrame.abrirReporte(ControlDeStockFrame.java:167)
    at com.alura.jdbc.view.ControlDeStockFrame$5.actionPerformed(ControlDeStockFrame.java:161)
    at java.desktop/javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1972)
Caused by: java.sql.SQLSyntaxErrorException: Unknown column 'C.ID' in 'field list'
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:120)
    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.executeQuery(ClientPreparedStatement.java:1003)
    at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeQuery(NewProxyPreparedStatement.java:1471)
    at com.alura.jdbc.dao.CategoriaDAO.listarConProductos(CategoriaDAO.java:59)
3 respuestas
solución!

Tenía el mismo problema, pero lo hice de la siguiente manera, haciendo todo el query de corrido no me dio error, espero te sirva

public List listarConProductos() { Listresultado=new ArrayList<>();

    try {
     **   var querySelect ="SELECT C.ID, C.NOMBRE, P.ID, P.NOMBRE, P.CANTIDAD FROM CATEGORIA  C INNER JOIN PRODUCTO P ON C.ID = P.CATEGORIA_ID";**
        System.out.println(querySelect);

        final PreparedStatement statement = con.prepareStatement(querySelect);
        try (statement){
            final ResultSet resultset= statement.executeQuery();
            try(resultset){
            while(((ResultSet) resultado).next()) {
                var categoria= new Categoria(resultset.getInt("ID"),
                        resultset.getString("NOMBRE"));

                resultado.add(categoria);
            }
        };
    }
}catch (SQLException e) {
        throw new RuntimeException(e);
        }
    return resultado;
}

gracias!! tenia el mismo problema

El problema es que faltaba un espacio antes del INNER JOIN, al concatenar la expresión quedo junta y por eso sale la excepción.