Java - Sentencia SQL con dos condiciones

 
Vista:
Imágen de perfil de Alejandro Werle
Val: 38
Ha aumentado 1 puesto en Java (en relación al último mes)
Gráfica de Java

Sentencia SQL con dos condiciones

Publicado por Alejandro Werle (21 intervenciones) el 26/08/2019 14:42:15
Cuando lo ejecuto, la segunda sentencia SQL debería filtrar según las dos condiciones que le pongo, pero no me arroja ningún resultado. Ya me asegure de que en mi tabla SQL tengo resultados que cumplan con esas condiciones..

Este es el código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
String proveedor = comboproveedor.getSelectedItem().toString();
if (proveedor == "TODOS"){
    DefaultTableModel modelo = (DefaultTableModel) tablaarticulos.getModel();
    modelo.setRowCount(0);
    PreparedStatement pst = null;
    ResultSet rs = null;
    try {
        Statement st = null;
        String sql = "Select stockminimo from articulos";
        st = connect().createStatement();
        rs = st.executeQuery(sql);
        while(rs.next()){
            String stockminimo  = rs.getString("stockminimo");
            try{
                String sql1 = "SELECT cod, articulo, proveedor, stockminimo, cantidad, unidad, preciocosto FROM articulos WHERE cantidad <= "+stockminimo+"";
                pst =connect().prepareStatement(sql1);
                rs = pst.executeQuery();
                while(rs.next()){
                    Vector v = new Vector();
                    v.add(rs.getString(1));
                    v.add(rs.getString(2));
                    v.add(rs.getString(3));
                    v.add(rs.getString(4));
                    v.add(rs.getString(5));
                    v.add(rs.getString(6));
                    v.add(rs.getString(7));
                    modelo.addRow(v);
                    tablaarticulos.setModel(modelo);
                }
            }catch(Exception e){
                System.err.println("Error" + e);
            }
        }
    }catch (Exception e) {
        JOptionPane.showMessageDialog(null,e);
    }
}else{
    DefaultTableModel modelo = (DefaultTableModel) tablaarticulos.getModel();
    modelo.setRowCount(0);
    PreparedStatement pst = null;
    ResultSet rs = null;
    try {
        Statement st = null;
        String sql = "Select stockminimo from articulos";
        st = connect().createStatement();
        rs = st.executeQuery(sql);
        while(rs.next()){
            String stockminimo  = rs.getString("stockminimo");
            try{
                String sql1 = "SELECT cod, articulo, proveedor, stockminimo, cantidad, unidad, preciocosto FROM articulos WHERE cantidad <= "+stockminimo+" AND proveedor = "+proveedor+"";
                pst =connect().prepareStatement(sql1);
                rs = pst.executeQuery();
                while(rs.next()){
                    Vector v = new Vector();
                    v.add(rs.getString(1));
                    v.add(rs.getString(2));
                    v.add(rs.getString(3));
                    v.add(rs.getString(4));
                    v.add(rs.getString(5));
                    v.add(rs.getString(6));
                    v.add(rs.getString(7));
                    modelo.addRow(v);
                    tablaarticulos.setModel(modelo);
                }
            }catch(Exception e){
                System.err.println("Error" + e);
            }
        }
    }catch (Exception e) {
        JOptionPane.showMessageDialog(null,e);
    }
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Billy Joel
Val: 2.665
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

[Solución] Sentencia SQL con dos condiciones

Publicado por Billy Joel (876 intervenciones) el 26/08/2019 18:25:11
Respuesta rápida: Estas utilizando el mismo ResultSet. Deberías utilizar un segundo ResultSet para la segunda consulta.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Billy Joel
Val: 2.665
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

[Alternativa] Sentencia SQL con dos condiciones

Publicado por Billy Joel (876 intervenciones) el 26/08/2019 19:14:39
No estoy muy seguro, viendolo bien debería funcionar; Pero te propongo esta alternativa,
Utilizar un método que te permita realizar consultas:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
/**
 * Ejecuta una consulta a la base de datos
 *
 * @param sqlCommand
 * @param params
 * @return
 */
public List<String[]> executeQuery(String sqlCommand, String[] params) {
    Connection cn = null;
    PreparedStatement pst = null;
    ResultSet rs;
    List<String[]> rows = null;
    try {
        cn = connect();
        pst = cn.prepareStatement(sqlCommand);
        if (params != null && sqlCommand.contains("?")) {
            for (int i = 0; i < params.length; i++) {
                pst.setObject(i + 1, params[i]);
            }
        }
        rs = pst.executeQuery();
        int cols = rs.getMetaData().getColumnCount();
        String[] row;
        rows = new ArrayList();
        while (rs.next()) {
            row = new String[cols];
            for (int i = 0; i < row.length; i++) {
                row[i] = rs.getString(i + 1);
            }
            rows.add(row);
        }
    } catch (SQLException ex) {
        System.out.println("Error al ejecutar query: " + sqlCommand);
        ex.printStackTrace(System.out);
    } finally {
        try {
            if (pst != null && !pst.isClosed()) {
                pst.close();
            }
            if (cn != null && !cn.isClosed()) {
                cn.close();
            }
        } catch (SQLException ex) {
            ex.printStackTrace(System.out);
        }
    }
    return rows;
}

Como ya tu resuelves las conexiones a la base de datos con el método connect(), éste método te permite realizar consultas parametrizadas.

Entonces modificamos el método que tienes por este:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
String proveedor = comboproveedor.getSelectedItem().toString();
String sql = "SELECT cod, articulo, proveedor, stockminimo, cantidad, unidad, preciocosto FROM articulos WHERE cantidad <= (Select stockminimo from articulos)";
List<String[]> rows;
if (proveedor.equalsIgnoreCase("todos")) {
    rows = executeQuery(sql, null);
} else {
    sql += " AND proveedor = ?";
    rows = executeQuery(sql, new String[]{proveedor});
}
String[] columnas = new String[tablaarticulos.getModel().getColumnCount()];
for (int i = 0; i < columnas.length; i++) {
    columnas[i] = tablaarticulos.getModel().getColumnName(i);
}
String[][] data = new String[rows.size()][columnas.length];
for (int i = 0; i < data.length; i++) {
    data[i] = rows.get(i);
}
tablaarticulos.setModel(new DefaultTableModel(data, columnas));

Esa es una belleza

Saludos,
Billy Joel
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Alejandro
Val: 38
Ha aumentado 1 puesto en Java (en relación al último mes)
Gráfica de Java

[Alternativa] Sentencia SQL con dos condiciones

Publicado por Alejandro (21 intervenciones) el 27/08/2019 16:01:32
Gracias por responder, pero encontré como resolverlo sin reescribir el código, solo me faltaban una comillas simples..

String sql1 = "SELECT cod, articulo, proveedor, stockminimo, cantidad, unidad, preciocosto FROM articulos WHERE cantidad <= "+stockminimo+" AND proveedor = '"+proveedor+"'";
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar