ResultSet对象中的错误

时间:2017-12-21 04:51:39

标签: java mysql

我正在思考MVC应用程序以及列表的加载方法,可以使用将要选择的元素来删除它们。

与此相关的类是:

package modelo;
import java.sql.*;
 import controlador.*;

public class CargaMenus {

    public CargaMenus() {
        miconexion = new Conexion();
    }

    public String ejecutaConsultas() { //Va a devolver el nombre de las tareas en el conbobox

        Tareas miTarea = null;

        Connection accesoBBDD = miconexion.dameConexion();

        try {
            Statement secciones = accesoBBDD.createStatement();

            Statement descripciones = accesoBBDD.createStatement();

            rs = secciones.executeQuery("SELECT DISTINCTROW NOMTAREA FROM TAREAS");

            rs2 = descripciones.executeQuery("SELECT DISTINCTROW DESCTAREA FROM TAREAS");

            miTarea = new Tareas();

            miTarea.setNomtarea(rs.getString(1));

            miTarea.setDesctarea(rs2.getString(1));


            rs.close();
            rs2.close();

        } catch (SQLException e) {
            System.out.println("Error en la conexión CARGAMENUS");
            e.printStackTrace();
        }

        return miTarea.getNomtarea();
    }

    public Conexion miconexion;
    public ResultSet rs;
    public ResultSet rs2; 
    private String consulta = "SELECT DISTINCTROW NOMTAREA FROM TAREAS";
    private String consulta2 = "SELECT DISTINCTROW DESCTAREA FROM TAREAS";
}

以及执行该方法并运行数据库返回的类的类是:

package controlador;

import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.sql.ResultSet;

import modelo.CargaMenus;
import vista.Marco_Aplicacion2;
public class ControladorCargaMenus extends WindowAdapter {


    public ControladorCargaMenus(Marco_Aplicacion2 elmarco) {
        this.elmarco = elmarco;
    }


    public void windowOpened(WindowEvent e) {


        obj.ejecutaConsultas();

        try {

            while(obj.rs.next()) {
                elmarco.secciones.addItem(obj.rs.getString(1));
            }
            while(obj.rs2.next()) {
                elmarco.paises.addItem(obj.rs2.getString(1));
            }
        } catch (Exception e2) {
            // TODO: handle exception
            e2.printStackTrace();
        }
    }

    CargaMenus obj = new CargaMenus();
    private Marco_Aplicacion2 elmarco;
}

当我运行程序时,我只看到我设计的2个组合框。

enter image description here

以及以下错误

enter image description here

我认为问题是我的sql查询,但我验证了它们,当我在mysql中运行它们时没有问题。

当我只加载其中一个列表(第一个)注释与第二个列表关联的行时,即使它在控制台中抛出错误,应用程序也会加载我

我所了解的链接是link of tutorial 我怎么能加载列表?

2 个答案:

答案 0 :(得分:0)

在获得结果之前,您应该致电rs.next

if (rs.next()) {
  miTarea.setNomtarea(rs.getString(1));

  miTarea.setDesctarea(rs2.getString(1));
}

答案 1 :(得分:0)

根本原因是您在rs.next()之前没有调用rs.getString,仅在ejecutaConsultas方法运行后调用它。同样适用于rs2用法。

此外,您还需要遵循代码中的一些最佳实践,例如不要将ResultSet暴露给类外部,并执行正确的JDBC异常处理以及关闭ResultSetConnection