Gente tenho o meu comboBox ta funcionando legal, mas naum sei pq ele puxa os dados duas vezes do Banco de Dados
[CODIGO]
[code]public void initComboBox(){
try {
ResultSet rs = super.getConnBD().getStm().executeQuery(“SELECT descricao FROM fn_ccusto”);
if(rs.first()){
do{
this.addItem(rs.getObject(1));
}
while(rs.next());
}
}
catch (SQLException ex){
ex.printStackTrace();
}
}[/code]
[CODIGO CLASSE PAI]
private DAOPai connBD = null;
public ColunaComboBox(){
connBD = new BancoDAO();
}
public DAOPai getConnBD() {
return connBD;
}
public void listar(){
for(int i = 0; i < this.getItemCount(); i++){
System.out.println(this.getItemAt(i).toString());
}
}
[CLASSE DAOPAI]
package Classes.DAO;
import BancoDeDados.GerenciaConexaoBancoComDados;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.ResultSet;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.logging.Level;
import java.util.logging.Logger;
public class DAOPai {
protected StringBuilder constroiSql = null;
protected SimpleDateFormat sdf = null;
protected DateFormat formatador;
protected ResultSet rs = null;
protected Statement stm = null;
protected GerenciaConexaoBancoComDados gcbd = null;
public DAOPai(){
gcbd = new GerenciaConexaoBancoComDados();
constroiSql = new StringBuilder();
sdf = new SimpleDateFormat("ddMMyyy");
this.formatador = this.sdf;
try {
this.stm = gcbd.getBanco().getConexao().createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
}
catch (SQLException ex) {
Logger.getLogger(DAOPai.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
PS.: Debuguei, mas não achei o erro! D:
fn_ccusto é uma função no bd, ou uma tabela?
Se for uma função teste o retorno dela, pois ela pode estar gerando os valores duplicados.
Eh uma tabela, sabe onde pode estar o erro?
cara… naum consegui enxergar o erro pois naum entendi algumas partes do seu codigo,
por exemplo:
onde o metodo initComboBox() é chamado?
quem é a classe BancoDao em
connBD = new BancoDAO();
mas pra resolver o teu problema, tenta fazer o seguinte:
pelo visto a tua classe estende a JcomboBox, certo?
entaum no metodo initComboBox(); coloque o comando
this.removeAllItems();
antes do loop que preenche o combo, desta forma não importa quantas vezes o metodo initComboBox() é chamado, ele vai sempre limpar os dados antes de preencher novamente.
[code]public void popularComboAssunto(){
cad_acervo.executeSQL("select Descricao_Assunto from Assunto");
try {
Jcombo_Assunto.removeAllItems();//aqui ele remove as duplicidades
Jcombo_Assunto.addItem("ESCOLHA UMA OPÇÃO");//aqui ele seta um valo default para a inicialização do combo
while (cad_acervo.resultset.next()) {
Jcombo_Assunto.addItem(cad_acervo.resultset.getString("Descricao_Assunto"));
}
} catch (SQLException ex) {
Logger.getLogger(Cad_Acervo.class.getName()).log(Level.SEVERE, null, ex);
}
}[/code]
Não sei pq, mas quando eu tiro o metodo initComboBox() da minha classe que extende uma classe q extende JComboBox, ele funciona sem duplicar os dados, mas naum entendi o pq?
classes completas:
Classe q extende ComboBox
package Classes.Modelos;
import Classes.DAO.DAOPai;
import javax.swing.JComboBox;
public class ColunaComboBox extends JComboBox{
private DAOPai connBD = null;
public ColunaComboBox(){
connBD = new DAOPai();
}
public DAOPai getConnBD() {
return connBD;
}
public void listar(){
for(int i = 0; i < this.getItemCount(); i++){
System.out.println(this.getItemAt(i).toString());
}
}
}
classe que extende ColunaComboBox
package Classes.Modelos;
import java.sql.ResultSet;
import java.sql.SQLException;
public class CombBoxTabCentCustGrupos extends ColunaComboBox {
public CombBoxTabCentCustGrupos(){
super();
initComboBox();
this.setEditable(true);
}
public void initComboBox(){
try {
ResultSet rs = super.getConnBD().getStm().executeQuery("SELECT descricao FROM fn_ccusto");
if(rs.first()){
do{
this.addItem(rs.getObject(1));
}
while(rs.next());
}
}
catch (SQLException ex){
ex.printStackTrace();
}
}
@Override
public void listar(){
super.listar();
}
}
classe DAOPai
package Classes.DAO;
import BancoDeDados.GerenciaConexaoBancoComDados;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.ResultSet;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
public class DAOPai {
protected StringBuilder constroiSql = null;
protected SimpleDateFormat sdf = null;
protected DateFormat formatador;
protected ResultSet rs = null;
protected Statement stm = null;
protected GerenciaConexaoBancoComDados gcbd = null;
public DAOPai(){
gcbd = new GerenciaConexaoBancoComDados();
constroiSql = new StringBuilder();
sdf = new SimpleDateFormat("ddMMyyy");
this.formatador = this.sdf;
try {
this.stm = gcbd.getBanco().getConexao().createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
}
catch (SQLException ex) {
ex.printStackTrace();
}
}
public DAOPai(SimpleDateFormat sdf, StringBuilder sb, GerenciaConexaoBancoComDados gcbd){
this.constroiSql = sb;
this.sdf = sdf;
this.gcbd = gcbd;
this.formatador = this.sdf;
try {
this.stm = gcbd.getBanco().getConexao().createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
}
catch (SQLException ex) {
ex.printStackTrace();
}
}
public DAOPai(SimpleDateFormat sdf, StringBuilder sb){
this.constroiSql = sb;
this.sdf = sdf;
this.gcbd = new GerenciaConexaoBancoComDados();
this.formatador = this.sdf;
try {
this.stm = gcbd.getBanco().getConexao().createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
}
catch (SQLException ex) {
ex.printStackTrace();
}
}
public GerenciaConexaoBancoComDados getGcbd() {
return gcbd;
}
public ResultSet getRs() {
return rs;
}
public Statement getStm() {
return stm;
}
}