Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Solucionado (ver solución)
Solucionado
(ver solución)
1
respuesta

[Duda] Cannot invoke "java.sql.ResultSet.next()" because "resultSet" is null

Buenas compas, alguien tiene idea por que al ejecutar la aplicación me manda esta exepción si la conexión se establece correctamente con la DB pero al momento de traer los datos no.

public List<Map<String, String>> listar() throws SQLException {
        Connection conn = DriverManager.getConnection( "jdbc:mysql://127.0.0.1/control_de_stock?useTimeZone=true&serverTimeZone=UTC" , "root", password );
        Statement statement = conn.createStatement();
        ResultSet resultSet = statement.getResultSet();

        boolean result = statement.execute( "select * from producto" );
        System.out.println( result );
        List<Map<String, String>> finalArray = new ArrayList<>();
        while (resultSet.next()) {

            Map<String,String> row = new HashMap<>();
            row.put("id", String.valueOf( resultSet.getInt( "id" ) ) );
            row.put("nombre",  String.valueOf( resultSet.getString( "nombre" ) ) );
            row.put("descripcion",  String.valueOf( resultSet.getString( "descripcion" ) ) );
            row.put("cantidad", String.valueOf( resultSet.getInt( "cantidad" ) ) );
            finalArray.add( row );

        }
        conn.close();


        return finalArray;
    }
1 respuesta
solución!

¡Hola José! Parece que el error que estás recibiendo se debe a que estás intentando llamar al método "next()" de un objeto ResultSet que es nulo. En tu código, no estás asignando el resultado de la consulta a la variable "resultSet" antes de intentar acceder a sus valores. Para solucionar este problema, debes mover la línea "ResultSet resultSet = statement.getResultSet();" después de la línea "boolean result = statement.execute( "select * from producto" );". De esta manera, la variable "resultSet" se asignará correctamente y podrás acceder a sus valores en el bucle while. Tu código debería quedar así:

public List<Map<String, String>> listar() throws SQLException {
    Connection conn = DriverManager.getConnection( "jdbc:mysql://127.0.0.1/control_de_stock?useTimeZone=true&serverTimeZone=UTC" , "root", password );
    Statement statement = conn.createStatement();

    boolean result = statement.execute( "select * from producto" );
    System.out.println( result );
    ResultSet resultSet = statement.getResultSet();

    List<Map<String, String>> finalArray = new ArrayList<>();
    while (resultSet.next()) {
        Map<String,String> row = new HashMap<>();
        row.put("id", String.valueOf( resultSet.getInt( "id" ) ) );
        row.put("nombre",  String.valueOf( resultSet.getString( "nombre" ) ) );
        row.put("descripcion",  String.valueOf( resultSet.getString( "descripcion" ) ) );
        row.put("cantidad", String.valueOf( resultSet.getInt( "cantidad" ) ) );
        finalArray.add( row );
    }

    conn.close();
    return finalArray;
}

Espero que esto resuelva tu problema. ¡Buenos estudios!