Java ResultSet对象中出现错误

Java ResultSet对象中出现错误,java,mysql,Java,Mysql,我考虑的是MVC应用程序以及列表的加载方法,这些列表可以通过选择的元素删除,以进行查询 与此相关的类有: package modelo; import java.sql.*; import controlador.*; public class CargaMenus { public CargaMenus() { miconexion = new Conexion(); } public String ejecutaConsultas() { //

我考虑的是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的组合框

还有下面的错误

我原以为问题在于我的sql查询,但我验证了它们,在mysql中运行它们时没有问题

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

我正在学习的链接是
如何加载列表?

在得到结果之前,您应该调用
rs.next

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

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

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

此外,您还需要在代码中遵循一些最佳实践,例如不要将
ResultSet
公开给类外,并执行适当的JDBC异常处理和关闭
ResultSet
s和
Connection
s。

将rs.close()和rs2.close()调用移到尝试使用结果集的位置之后