2017-12-21 11 views
-2

私は、MVCアプリケーションと、そのクエリのために選択される要素で削除できるリストの読み込みメソッドについて考えています。ResultSetオブジェクトのエラー

これに関連するクラスは次のとおりです。

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でそれらを実行して問題はありません。

と私は第二のリストに関連付けられている行をコメントリストの1(最初の1)をロードするとき、それはコンソール

私が学んでいるリンクでエラーをスローした場合でもアプリケーションがロード私is link of tutorial リストをロードするにはどうすればよいですか?

+0

結果セットを使用しようとする場所の後で、rs.close()およびrs2.close()呼び出しを移動する – slipperyseal

答えて

0

結果を得る前にrs.nextに電話する必要があります。

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

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

根本的な原因は、あなたがejecutaConsultasメソッドが実行された後、それが唯一呼ばれrs.next()rs.getString,前に呼び出しされていないということです。同じことがrs2用です。

また、あなたは、このようなクラスの外にResultSetを暴露し、適切なJDBCの例外処理とResultSet sおよびConnection秒の閉鎖を行っていない、あなたのコード内のいくつかのベストプラクティスを実行する必要があります。

関連する問題