我正在思考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中运行它们时没有问题。
当我只加载其中一个列表(第一个)注释与第二个列表关联的行时,即使它在控制台中抛出错误,应用程序也会加载我
我所了解的链接是link of tutorial 我怎么能加载列表?
答案 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异常处理以及关闭ResultSet
和Connection
。