style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

Problema al intentar consultar tabla de base de datos hecha en MySQL

Saludos a todos, espero puedan ayudarme. El problema que tengo es el siguiente:

Tengo una clase hecha en Netbeans, la cual, utilizo para conectarme, hacer consultas y ejecutar acciones sobre una base de datos hecha en mysql (la base de datos se llama "pva" y la tabla sobre la cual hago la consulta se llama "maquina", la cual, tiene los siguientes campos: TipoMaquina-VarChar, Tarifa-Float, Maquinas-VarChar):

package Herramientas;

import java.sql.*;
import javax.swing.JOptionPane;

public class ConexionBaseDatos {

    private Connection conexion = null;

    public ConexionBaseDatos conectar() {
        try {
            DriverManager.registerDriver(new org.gjt.mm.mysql.Driver());
            Class.forName("com.mysql.jdbc.Driver").newInstance();
            String url = "jdbc:mysql://localhost/pva?user=root&password=administrador";
            setConexion(DriverManager.getConnection(url));
            if(getConexion() == null) JOptionPane.showMessageDialog(null, "No se pudo conectar a la base de datos.");
        } catch(SQLException | ClassNotFoundException | InstantiationException | IllegalAccessException e) {
            JOptionPane.showMessageDialog(null, "Error: " + e.getMessage());
        } return this;
    }

    public Connection getConexion() {
        return conexion;
    }

    public void setConexion(Connection conexion) {
        this.conexion = conexion;
    }

    public boolean ejecutar(String sql) {
        try {
            Statement sentencia = getConexion().createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
            sentencia.executeUpdate(sql);
            sentencia.close();
        } catch(SQLException e) {
            e.printStackTrace();
            return false;
        } return true;
    }

    public ResultSet consultar(String sql) {
        ResultSet resultado;
        try {
            Statement sentencia = getConexion().createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
            resultado = sentencia.executeQuery(sql);
        } catch(SQLException e) {
            e.printStackTrace();
            return null;
        } return resultado;
    }
}

Con la conexión no tengo ningún problema, pero al parecer al momento de realizar consultas ocurre algo que hasta ahora no logro entender. La clase escrita anteriormente está implementada dentro de un JDialog:

package GUIs;

import Herramientas.ConexionBaseDatos;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.ResultSet;

public class PanelControl extends javax.swing.JDialog implements ActionListener {

    ConexionBaseDatos cbd;

    public PanelControl(java.awt.Frame parent, boolean modal) {
        super(parent, modal);
        initComponents();
        this.setTitle("PANEL DE CONTROL");
        this.setLocationRelativeTo(null);
        this.setVisible(true);
    }

    @SuppressWarnings("unchecked")
    //Generated Code (código generado por Netbeans).

    public void actionPerformed(ActionEvent e) {
        if(e.getSource().equals(jcbTM)) {
            loadData();
        }
    }

    public void loadData() {
        cbd = new ConexionBaseDatos().conectar();
        ResultSet resultados = cbd.consultar("SELECT Tarifa, Maquinas FROM maquina WHERE TipoMaquina = '" +  String.valueOf(jcbTM.getItemAt(jcbTM.getSelectedIndex())) + "'");
        if(resultados != null) {
            try {
                txtTarifa.setText(String.valueOf(resultados.getFloat("Tarifa")));
                //Aquí pondré el código para agregar elementos de la consulta en un JListBox.
                cbd.getConexion().close();
            } catch(Exception e) { e.printStackTrace(); }
        }
    }

    public static void main(String args[]) {
        //Look and feel setting code (optional)
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                PanelControl dialog = new PanelControl(new javax.swing.JFrame(), true);
                dialog.addWindowListener(new java.awt.event.WindowAdapter() {
                    @Override
                    public void windowClosing(java.awt.event.WindowEvent e) {
                        System.exit(0);
                    }
                });
                dialog.setVisible(true);
            }
        });
    }

    //De aquí en adelante están las declaraciones de las variables generadas por el mismo Netbeans.

Entonces al momento de ejecutar la aplicación y luego de elegir o hacer click sobre el elemento del JComboBox (ya esta agregado el evento ActionListener) para inmediatamente realizar la consulta teniendo como argumento el dato elegido del mismo; se obtiene la siguiente excepción en la consola:

run:
java.sql.SQLException: Before start of result set
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:910)
at com.mysql.jdbc.ResultSet.checkRowPos(ResultSet.java:720)
at com.mysql.jdbc.ResultSet.getStringInternal(ResultSet.java:5624)
at com.mysql.jdbc.ResultSet.getString(ResultSet.java:5544)
at com.mysql.jdbc.ResultSet.getFloat(ResultSet.java:2523)
at com.mysql.jdbc.ResultSet.getFloat(ResultSet.java:2543)
at GUIs.PanelControl.loadData(PanelControl.java:122)
at GUIs.PanelControl.actionPerformed(PanelControl.java:113)
at javax.swing.JComboBox.fireActionEvent(JComboBox.java:1260)
at javax.swing.JComboBox.setSelectedItem(JComboBox.java:588)
at javax.swing.JComboBox.setSelectedIndex(JComboBox.java:624)
at javax.swing.plaf.basic.BasicComboPopup$Handler.mouseReleased(BasicComboPopup.java:835)
at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:290)
at java.awt.Component.processMouseEvent(Component.java:6505)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
at javax.swing.plaf.basic.BasicComboPopup$1.processMouseEvent(BasicComboPopup.java:499)
at java.awt.Component.processEvent(Component.java:6270)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4861)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2713)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:707)
at java.awt.EventQueue.access$000(EventQueue.java:101)
at java.awt.EventQueue$3.run(EventQueue.java:666)
at java.awt.EventQueue$3.run(EventQueue.java:664)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:680)
at java.awt.EventQueue$4.run(EventQueue.java:678)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:677)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:121)
at java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:182)
at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:221)
at java.security.AccessController.doPrivileged(Native Method)
at java.awt.WaitDispatchSupport.enter(WaitDispatchSupport.java:219)
at java.awt.Dialog.show(Dialog.java:1072)
at java.awt.Component.show(Component.java:1651)
at java.awt.Component.setVisible(Component.java:1603)
at java.awt.Window.setVisible(Window.java:1013)
at java.awt.Dialog.setVisible(Dialog.java:1003)
at GUIs.PanelControl.(PanelControl.java:17)
at GUIs.Principal.actionPerformed(Principal.java:213)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:289)
at java.awt.Component.processMouseEvent(Component.java:6505)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
at java.awt.Component.processEvent(Component.java:6270)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4861)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2713)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:707)
at java.awt.EventQueue.access$000(EventQueue.java:101)
at java.awt.EventQueue$3.run(EventQueue.java:666)
at java.awt.EventQueue$3.run(EventQueue.java:664)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:680)
at java.awt.EventQueue$4.run(EventQueue.java:678)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:677)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
GENERACIÓN CORRECTA (total time: 34 seconds)

Espero su pronta ayuda.

Gracias por su tiempo.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

Que tal...

Oye yo tengo otra forma de hacer esas consultas... en postgresql pero es lo mismo... pasame tu correo y te lo mando...

Imagen de DagMinos

Ayuda

Gracias brother, agradezco tu ayuda. Mi correo es: dagminos@gmail.com

Imagen de Jose Manuel

¿Pero que hacen? Enviado

¿Pero que hacen? Enviado posibles soluciones a un correo... el sitio es una comunidad. La información se postea aquí para que sea útil para quien quiera que tenga una situación similar. Qué ruindad (he estado ampliando mi vocabulario ñ.ñ )...

Si es demasiado código, utilicen herramientas como http://pastebin.com/ o similares. Recuerden, tanto peca el mata la vaca como el que le alza la pata.
Saludos.

Tienes razon...

El ejemplo siguiente contiene insercion y consulta en Base de Datos.
Es en JSF, RichFaces y Netbeans

http://www.4shared.com/rar/jX3AUtQJ/SAD_Final_9.html?refurl=d1url

Saludos!!!

Imagen de DagMinos

Te doy la razón brother ...

Soy nuevo en la comunidad.

Gracias por responder. Revise el ejemplo que me enviaste marcos pero básicamente es lo mismo y pues aun no doy con la solución a mi problema, lo que probaré es eliminar la base de datos y crearla nuevamente porque cuando instale MySQL tuve problemas y luego tuve que reinstalar ... quizás sea eso porque a mi parecer la clase que tengo para realizar la conexión, consultas y ejecuciones esta bien.

Si alguien tiene alguna otra idea del porque del problema, agradecería su ayuda.

Imagen de DagMinos

Solucionado...

Gracias a todos por intentar ayudar pero felizmente ya solucioné mi problema.

Aquí dejo la solución:

En el método loadData() de la clase PanelControl que es del tipo JDialog, este era mi código anterior:

    public void loadData() {
        cbd = new ConexionBaseDatos().conectar();
        ResultSet resultados = cbd.consultar("SELECT Tarifa, Maquinas FROM maquina WHERE TipoMaquina = '" +  String.valueOf(jcbTM.getItemAt(jcbTM.getSelectedIndex())) + "'");
        if(resultados != null) {
            try {
                txtTarifa.setText(String.valueOf(resultados.getFloat("Tarifa")));
                //Aquí pondré el código para agregar elementos de la consulta en un JListBox.
                cbd.getConexion().close();
            } catch(Exception e) { e.printStackTrace(); }
        }
    }

Y aquí el código modificado, el único cambio que hice prácticamente fue en la condicional la cual lo reemplace por "resultados.firts()" y listo ...

    public void loadData() {
        cbd = new ConexionBaseDatos().conectar();
        ResultSet resultados = cbd.consultar("SELECT Tarifa, Maquinas FROM maquina WHERE TipoMaquina = '" +  String.valueOf(jcbTM.getItemAt(jcbTM.getSelectedIndex())) + "'");
        try {
            if(resultados.first()) {
                txtTarifa.setText(String.valueOf(resultados.getFloat("Tarifa")));
                //Aquí pondré el código para agregar elementos de la consulta en un JListBox.
                cbd.getConexion().close();
            } else JOptionPane.showMessageDialog(this, "NO EXISTEN REGISTROS DEL TIPO " + String.valueOf(jcbTM.getSelectedItem()).toUpperCase(), "GAME MANAGER", JOptionPane.INFORMATION_MESSAGE);
        } catch(Exception e) { e.printStackTrace(); }
    }

De todos modos agradezco su participación y espero que el tema sea útil para otros miembros de la comunidad con el mismo problema.

GRACIAS :D.

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">