怀疑从 DAO 函数向 JComboBox 输入数据

Posted

技术标签:

【中文标题】怀疑从 DAO 函数向 JComboBox 输入数据【英文标题】:Doubts to input data from DAO functions to JComboBox 【发布时间】:2017-02-08 13:19:53 【问题描述】:

这是我第一次来这里,因此是我的第一个问题,我看到一个演示应用程序通过网络学习从 JCombobox 中选择一个选项并根据它获取他相应的 ID,但他所有的数据库查询、preparedstatements 和 resultSet 方法都是直接的在 JCombobox actionPerformed 事件上做了,现在我正试图在我的大学期末论文申请中使用这个想法。 我正在尝试在 DAO 类中执行所有代码,为此我执行了两个函数 comboboxUse() 和 getCodPrioridade(),一个用于将数据库中的所有项目返回到 JCombobox,另一个用于从每个项目中获取 id但它返回一个不完整的 JCombobox,只有最后一行,我确实喜欢这样:

package br.com.jdbc.victor.dao.entidadesdao;

import br.com.jdbc.dao.DAOException;
import br.com.jdbc.victor.transicao.ChamadoDAO;
import br.com.jdbc.victor.vo.Chamado;
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Time;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import java.util.logging.Level;
import java.util.logging.Logger;

private Connection con;
private PreparedStatement pstm;
private Statement stm = null;
private ResultSet rs = null;


@Override
public String comboboxUse() throws DAOException
   Chamado c = null;
   String getpri = null;

   try
      getpri = "SELECT * FROM prioridadedetalhe";
      stm = con.createStatement();
      rs = stm.executeQuery(getpri);

      while(rs.next())
         c = new Chamado();
         c.setPrioridade(rs.getString("prioridade"));
         c.toString();
      

     catch(SQLException ex)
         throw new DAOException("Erro no SQL", ex);
     finally 
         if(pstm!=null)
    try 
        pstm.close();
     catch (SQLException ex) 
        throw new DAOException("Erro ao fechar conexão", ex);
    
         if(rs!=null)
            try 
                rs.close(); 
             catch (SQLException ex) 
                throw new DAOException("Erro ao fechar conexão", ex);
             
        
    
  return c.getPrioridade();

在我尝试以这种形式调用该函数之后:

package br.com.jdbc.victor.view;

import br.com.jdbc.dao.DAOException;
import br.com.jdbc.victor.dao.entidadesdao.mysqlChamadoDAO;
import br.com.jdbc.victor.dao.entidadesdao.MySQLDaoManager;
import br.com.jdbc.victor.vo.Chamado;
import java.sql.Date;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Time;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JOptionPane;


public class FormNovaChamada extends javax.swing.JDialog 
    private Chamado chamado;
    private boolean editavel;
    private MySQLChamadoDAO chamdao;
    private FormInicio frmini;
    private MySQLDaoManager man;
    private ResultSet rs = null;

    int cont = 0;
    int i = 0;

    public Chamado getChamado() 
        return chamado;
    

    public void setChamado(Chamado chamado) 
        this.chamado = chamado;
    

    public boolean isEditavel() 
        return editavel;
    


public FormNovaChamada(java.awt.Frame parent, boolean modal) throws SQLException 
    super(parent, modal);
    initComponents();
    desabilitarTextField();
    this.cbPrioridade.removeAllItems();
    try 
         MySQLDaoManager man = new MySQLDaoManager("root", "", "localhost", "atendimentos", 3306);
     this.cbPrioridade.addItem(man.getChamadoDAO().comboboxUse());
cont++;
     catch (DAOException ex) 
Logger.getLogger(FormNovaChamada.class.getName()).log(Level.SEVERE, null, ex);
    

这是我的数据库:

+---------------------+------------+
| idPrioridadeDetalhe | prioridade |
+---------------------+------------+
|                   1 | alta       |
|                   2 | média      |
|                   3 | baixa      |
+---------------------+------------+

显然它没有给出任何错误或类似的东西,它获取列的最后一个数据,而不是获取所有数据库值以插入 JCombobox...我想知道我能做什么? !不知道我的问题是否清楚,还是谢谢!!

【问题讨论】:

【参考方案1】:

假设 cbPrioridade 是您的 JComboBox 组件,请检查您为什么只添加一个项目:

 this.cbPrioridade.addItem(man.getChamadoDAO().comboboxUse());

在此之前检查为什么只从 db 中返回字符串

public String comboboxUse() throws DAOException

你只返回数据库中的最后一个元素而不是返回列表

【讨论】:

嗨奥莱西亚!非常感谢您的帮助,我在这里所做的确实是一个愚蠢的错误,我已将函数返回更改为 List 并且我在表单上进行了从 List 到 Array 的转换,它工作正常!!!非常感谢:D

以上是关于怀疑从 DAO 函数向 JComboBox 输入数据的主要内容,如果未能解决你的问题,请参考以下文章

如何从 ArrayList 更新 JComboBox 内容?

JComboBox(下拉列表)的使用(笔记整理)

从数据库中获取值后如何清除 jComboBox

[更新数组后更新JcomboBox

Java Swing jComboBox 未从数据库中填充

对单元测试 DAO 的怀疑