Java - Mostrar consultas, altas, bajas, modificaciones

 
Vista:

Mostrar consultas, altas, bajas, modificaciones

Publicado por Kevin (2 intervenciones) el 23/02/2019 22:58:29
Hola, estoy trabajando con jFrame, de manera que realice las acciones comentadas en el titulo de este post.

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
import java.sql.*;
import javax.swing.JOptionPane;
/**
 *
 * @author corpu
 */
public class NewJFrameMain extends javax.swing.JFrame {
 
    //variables del tutorial de jose daniel rodriguez en youtube (le di like
    //para poder verlo mas tarde como referencia (yutube))
    static Connection cn;
    static Statement st;
    static ResultSet rs;
 
    /**
     * Creates new form NewJFrameMain
     */
    public NewJFrameMain() {
        initComponents();
        this.setLocationRelativeTo(null);
    }
 
      //metodos del mismo viode de jose daniel rodriguez
    public void conectar(){
        try{
            String url="jdbc:oracle:thin:@localhost:1521:XE";
            cn=DriverManager.getConnection(url,"hradmin","1234");
            st=cn.createStatement();
        }
        catch(Exception e){
            JOptionPane.showMessageDialog(null,"No ha sido posible conectarse \n"+e );
        }
    }
 
    private void JButon_obsInd_empleadoActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:
      try{
 
          conectar();
          JOptionPane.showMessageDialog(null,rs=st.executeQuery("SELECT * FROM EMPLEADO WHERE NSS='"+jTextField1.getText()+"'"));
 
 
      }
      catch(Exception e){
          JOptionPane.showMessageDialog(null, "El empleado no existe");
      }
    }

Al utilizar mi botón "mostrar empleado" el cual reliza el executequery me lanza el siguiente error:

Oracle.jdbc..driver.ForwardOnlyResults@8234545

Ayuda por favor no quiero reporbar D:
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

Mostrar consultas, altas, bajas, modificaciones

Publicado por Billy Joel (876 intervenciones) el 24/02/2019 06:22:18
Lo que puedo ver de tu código es que la base de datos es Oracle.
Java es un lenguaje tan versatil que solo toca cambiar el driver y colocar el nombre del driver que se va a utilizar.

Entonces otra cosa que puedo ver es que no estas cerrando las conexiones a la base de datos, esto es muy importante, ya que la base de datos se puede quedar sin conexiones.
Lo otro que puedo ver es que estás haciendo un mal uso del ResultSet.
Tienes un código muy compacto pero, tener menos líneas de códgio no va hacer que tu programa sea mas eficiente.

Primero hagamos algunas correcciones a tu código. En tu constructor
1
2
3
4
5
6
7
8
9
public NewJFrameMain() {
    initComponents();
    this.setLocationRelativeTo(null);
    try {
        Class.forName("oracle.jdbc.driver.OracleDriver");
    } catch (ClassNotFoundException ex) {
        ex.printStackTrace(System.out);
    }
}

Modificamos tu método conectar
1
2
3
4
5
6
7
8
9
10
11
public Connection conectar() {
    Connection cn = null;
    try {
        String url = "jdbc:oracle:thin:@localhost:1521:XE";
        cn = DriverManager.getConnection(url, "hradmin", "1234");
    } catch (SQLException e) {
        e.printStackTrace(System.out);
        JOptionPane.showMessageDialog(null, "No ha sido posible conectarse \n" + e);
    }
    return cn;
}

Entonces te voy a dejar mi método para realizar consultas, es una belleza, además lo voy adaptar a tu código mira esto
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
/**
 * Ejecuta una consulta a la base de datos sin parámetros
 * Devuelve un mapa con los datos
 * de la consulta. El mapa consta de dos elementos
 * <ul>
 * <li><b>List&lt;String&gt; columns</b> Una lista con los nombres de las
 * columnas</li>
 * <li><b>List&lt;String[]&gt; rows</b> Una lista con los registros de la
 * consulta</li>
 * </ul>
 *
 * @param sqlCommand
 * @return
 */
public Map<String, Object> executeQuery(String sqlCommand) {
    return executeQuery(sqlCommand, "");
}
 
/**
 * Ejecuta una consulta a la base de datos con 1 parámetro
 * Devuelve un mapa con los datos
 * de la consulta. El mapa consta de dos elementos
 * <ul>
 * <li><b>List&lt;String&gt; columns</b> Una lista con los nombres de las
 * columnas</li>
 * <li><b>List&lt;String[]&gt; rows</b> Una lista con los registros de la
 * consulta</li>
 * </ul>
 *
 * @param sqlCommand
 * @param param
 * @return
 */
public Map<String, Object> executeQuery(String sqlCommand, String param) {
    return executeQuery(sqlCommand, new String[]{param});
}
 
/**
 * Ejecuta una consulta a la base de datos. 
 * Devuelve un mapa con los datos
 * de la consulta. El mapa consta de dos elementos
 * <ul>
 * <li><b>List&lt;String&gt; columns</b> Una lista con los nombres de las
 * columnas</li>
 * <li><b>List&lt;String[]&gt; rows</b> Una lista con los registros de la
 * consulta</li>
 * </ul>
 *
 * @param sqlCommand
 * @param params
 * @return
 */
public Map<String, Object> executeQuery(String sqlCommand, String[] params) {
    Connection cn = null;
    PreparedStatement pst = null;
    ResultSet rs;
    List<String> columns = new ArrayList();
    List<String[]> rows;
    Map<String, Object> mapa = new HashMap();
    try {
        cn = MyConnection.getInstance().getConnection();
        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();
        for (int i = 1; i <= cols; i++) {
            columns.add(rs.getMetaData().getColumnName(i));
        }
        mapa.put("columns", columns);
        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);
        }
        mapa.put("rows", rows);
    } 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 mapa;
}

En caso de que quieras ejecutar comandos (update, insert, delete) te dejo este otro método
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
public boolean executeStatement(String sqlCommand) {
    return executeStatement(sqlCommand, "");
}
 
/**
 * Ejecuta un comando a la base de datos con 1 parámetro
 *
 * @param sqlCommand
 * @param param
 * @return
 */
public boolean executeStatement(String sqlCommand, String param) {
    return executeStatement(sqlCommand, new String[]{param});
}
 
/**
 * Ejecuta un comnado a la base de datos
 *
 * @param sqlCommand
 * @param params
 * @return
 */
public boolean executeStatement(String sqlCommand, String[] params) {
    Connection cn = null;
    PreparedStatement pst = null;
    int afectados = 0;
    try {
        cn = MyConnection.getInstance().getConnection();
        pst = cn.prepareStatement(sqlCommand);
        if (params != null && sqlCommand.contains("?")) {
            for (int i = 0; i < params.length; i++) {
                pst.setObject(i + 1, params[i]);
            }
        }
        afectados = pst.executeUpdate();
    } catch (SQLException ex) {
        System.out.println("Error al ejecutar sentencia: " + sqlCommand);
        System.out.println("Parametros: ");
        if (params != null) {
            for (String param : params) {
                System.out.println(param);
            }
        }
        ex.printStackTrace(System.out);
    } finally {
        try {
            if (pst != null) {
                pst.close();
            }
            if (cn != null) {
                cn.close();
            }
        } catch (SQLException ex) {
            ex.printStackTrace(System.out);
        }
    }
    return afectados > 0;
}

Ahora modificamos el action de tu botón:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
private void JButon_obsInd_empleadoActionPerformed(java.awt.event.ActionEvent evt) {
    Map<String, Object> consulta = executeQuery("SELECT * FROM EMPLEADO WHERE NSS = ?", jTextField1.getText());
    List<String> columns = (List<String>) consulta.get("columns");
    List<String[]> rows = (List<String[]>) consulta.get("rows");
    String message = "";
    if (rows != null && !rows.isEmpty()) {
        message = "Datos del empleado:";
        for (String[] row : rows) {
            for (int i = 0; i < row.length; i++) {
                message += "\n" + columns.get(i) + ": " + row[i];
            }
        }
    } else {
        message = "El empleado no existe";
    }
    JOptionPane.showMessageDialog(null, message);
}

Espero que le des uso a estos métodos y si tienes alguna duda solo escribe
Saludos!!
;-)
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
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

Mostrar consultas, altas, bajas, modificaciones

Publicado por Billy Joel (876 intervenciones) el 24/02/2019 07:04:24
Supongamos que quieres hacer una consulta de todos los registros de la tabla EMPLEADO
1
2
3
4
5
6
7
8
9
10
11
12
13
public void imprimirEmpleados() {
//        System.out.println("Test: " + MyConnection.getInstance().testConnection());
    Map<String, Object> m = MyQuery.getInstance().executeQuery("select * from EMPLEADO");
    List<String> columns = (List<String>) m.get("columns");
    List<String[]> rows = (List<String[]>) m.get("rows");
 
    rows.forEach(r->{
        for (int i = 0; i < r.length; i++) {
            System.out.println(columns.get(i)+": " + r[i]);
        }
        System.out.println();
    });
}
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