Translate

jueves, 2 de octubre de 2014

Error: "SQLException: Before start of result set"

Introducción


De vez en cuando seguro que nos toparemos con un error similar a este:
java.sql.SQLException: Before start of result set
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1074)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:988)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:974)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:919)
    at com.mysql.jdbc.ResultSetImpl.checkRowPos(ResultSetImpl.java:855)
    at com.mysql.jdbc.ResultSetImpl.getInt(ResultSetImpl.java:2710)

Solución


La solución es muy simple, suponiendo que el result set se obtenga en la variable resultados, entonces bastaría con poner un:
resultados.next();

Explicación

En Java los result sets se obtienen en el índice 0, por ello para poder obtener la información debemos recorrerlo a el índice 1. Esto se hace mediante la llamada al método next de la clase ResultSet instanciando a la clase, pues no es un método estático.

9 comentarios:

  1. private void btnrolActionPerformed(java.awt.event.ActionEvent evt) {
    try {
    ControladorRegistro cr = new ControladorRegistro();
    Statement consulta = miconexion.createStatement();

    ResultSet CodRol = consulta.executeQuery("SELECT RolesLogin_fk FROM login WHERE CorreoLogin='"+jComboBox_Correo+"'");

    JOptionPane.showMessageDialog(this, CodRol);
    // txtRol.setText(""+CodRol);
    // cr.setRolesPersona_fk(txtRol.getText());
    } catch (SQLException ex) {
    Logger.getLogger(Registro.class.getName()).log(Level.SEVERE, null, ex);
    }
    }

    Y ME SALE ESTE ERROR
    error en java com.mysql.jdbc.ResultSet@

    ResponderEliminar
  2. EN VES DE APARECERME EL CODIGO DEL LOGIN ME APARECE ESE ERROR

    ResponderEliminar
  3. has probado con JOptionPane.showMessageDialog(this, CodRol.next());

    ResponderEliminar
  4. Hola!

    Estoy validando un registro en la BD con este código:

    void Validacedula() {

    try{
    String sql=("SELECT cedulacli,nombrecli FROM registro_clientes WHERE cedulacli = '" + rnc.getText()+ "'");
    Statement st = cn.createStatement();
    ResultSet rs = st.executeQuery(sql);


    if ( rs.next() ){
    String nom = rs.getString("nombrecli");
    JOptionPane.showMessageDialog(null, "CEDULA O RNC REGISTRADO A NOMBRE DE: " +nom , "Error",JOptionPane.ERROR_MESSAGE);
    rnc.requestFocus(true);

    } else {

    // JOptionPane.showMessageDialog(null, "NO EXISTE RNC O CEDULA: " + rnc.getText(), "Error",JOptionPane.ERROR_MESSAGE);
    Valida_codigo_cliente();
    rs.close();
    }

    } catch (SQLException exx){
    JOptionPane.showMessageDialog(null, exx);
    }
    }

    Pero si no es igual al seleccionado en la BD, tengo que me abra otra validación pero para el código del cliente:

    void Valida_codigo_cliente() {

    try{
    String sql1=("SELECT codigocli,nombrecli FROM registro_clientes WHERE codigocli = '" + codigo.getText()+ "'");
    Statement stt = cn.createStatement();
    ResultSet rss = stt.executeQuery(sql1);

    String nom = rss.getString("nombrecli");
    if (rss.next() ){
    JOptionPane.showMessageDialog(null, "EL CODIGO PERTENECE A: " + nom, "Mensaje",JOptionPane.INFORMATION_MESSAGE);
    codigo.requestFocus(true);

    } else {
    insertar_datos_clientes_planes();
    insertar_datos_clientes();
    limpiar();
    bloquear();
    nuevo.setEnabled(true);
    // JOptionPane.showMessageDialog(null, "NO CODIGO: " + codigo.getText(), "Error" ,JOptionPane.ERROR_MESSAGE);
    }
    } catch (SQLException ex){
    JOptionPane.showMessageDialog(null, ex);
    }
    }

    Y aun así me sale: java sql sqlexception before start of result set

    ResponderEliminar
    Respuestas
    1. en la segunda consulta tienes (String nom = rss.getString("nombrecli"), esto tienes que ponerlo en un while (rss.next()) {
      String nom = rss.getString("nombrecli"
      }
      y listo

      Eliminar
  5. Al momento de llegar a:

    } else {

    // JOptionPane.showMessageDialog(null, "NO EXISTE RNC O CEDULA: " + rnc.getText(), "Error",JOptionPane.ERROR_MESSAGE);
    Valida_codigo_cliente();
    rs.close();
    }

    es que me sale el error

    ResponderEliminar