Listar valores em um JTextArea

8 respostas
JennyMelo

Oi ... o meu problema e o seguinte...
No meu sistema tem uma formulário q gera uma lista com os aniversariantes do Mês... O mês é selecionado através de um JComboBox e ao clicar no JButton ele realiza a pesquisa e gera a lista com os nomes de todos os funcionários q fazem aniversário naquele mês...
Mais não estou conseguindo gerar a lista... a pesquisa para no primeiro funcionário e o lista e naum da continuidade...

Aqui eu pesquiso a Data de Aniversario e seleciono os funcionarios q fazem aniversario naquele mes...
String pesquisaDataNasc() {
        try {
            ResultSet resultado = bd.consultaTable("SELECT dt_nascimento FROM funcionario WHERE nome ='" + n2 + "'");
            if (resultado != null && resultado.next()) {
                do {
                    dt_n = (resultado.getString("dt_nascimento"));
                } while (resultado.next());
            }
        } catch (java.sql.SQLException e) {
            System.err.println(dt_n);
        }
        return dt_n;
    }
 void pesquisaMes(String mes) {


        int x = 0;
        try {
            ResultSet resultado = bd.consultaTable("SELECT COUNT(id_func) FROM funcionario WHERE mes ='" + mes + "'");

            if (resultado != null && resultado.next()) {
                do {

                    x = (resultado.getInt("COUNT(id_func)"));

                } while (resultado.next());
            } else {
            }
        } catch (java.sql.SQLException e) {
            System.err.println("erro de SQL:" + e.getMessage());
        }


        DefaultListModel model = new DefaultListModel();      

        while (i < x) {
            i++;
            try {
                ResultSet resultado = bd.consultaTable("SELECT nome FROM funcionario WHERE mes = '" + mes + "'");
                if (resultado != null && resultado.next()) {
                    this.mes = (resultado.getString("nome"));
                    teste[i] = this.mes;
                    resultado.next();            
                } else {
                    x++;
                }

            } catch (java.sql.SQLException e) {
                System.err.println("erro de SQL:" + e.getMessage());
            }
        }
    }

    String retornaAlgumaCoisa() {
        return teste[i];

    }

Aqui eu pego a data e a divido selecionando o mes para comparação no banco e exibo o nome na lista

dtn = cad.pegaDataAniver();
        combo = comboMes.getSelectedItem().toString();

        if (dtn.equals("__/__/____")) {
            mes1 = "__/__/____";
        } else {
            data = dtn;
            a = data.substring(3, 5);
            mes = (a);
        }
        cad.pesquisaMes(combo);
        String resposta;

        resposta = cad.retornaAlgumaCoisa();

        lstAniversarios.setText(resposta + "\n");

Não sei se fui clara o suficiente... mais se alguem puser me ajudar ficarei grata...

8 Respostas

ViniGodoy

É impressão minha, ou no seu banco mês é um String?

JennyMelo

Olá ViniGodoy … sim o campo mês é um String… posso estar enganada mais creio q naum seje esse o problema ja q a pesquisa e
realizada sem problemas, a questão e q não consigo listar mais de um funcionário…

JennyMelo

Olá ViniGodoy … sim o campo mês é um String… posso estar enganada mais creio q naum seje esse o problema ja q a pesquisa e realizada sem problemas, a questão e q não consigo listar mais de um funcionário…

ViniGodoy

Você deve corrigir seu método retornaAlgumaCoisa():

String retornaAlgumaCoisa() {  
   if (teste.length == 0) return "";

   StringBuilder sb = new StringBuilder(teste[0]);
   
   for (int ind = 1; ind < teste.length; ind++) {
      sb.append(teste[i]).append(", ");

   return sb.toString();  
}

Do jeito que está, ele só está pegando um dos funcionários da lista.

ViniGodoy

Outra coisa, seu código está extremamente bagunçado.
Seria bom você reorganiza-lo. Algumas dicas:

  1. Utilize os tipos de dados corretos no banco de dados. A data de nascimento é do tipo Date. Se só interesse o mês e o ano, então, os dois ficam com tipo int;
  2. Faça consulta através do PreparedStatement. Isso evita que você concatene dados na sua SQL com o sinal de +. Evita ataques de SQL Injection, evita que você tenha que tratar a possibilidade do usuário ter digitado aspas simples no texto do campo, e evita também a necessidade de conhecer o formato de datas específico do banco de dados;
  3. Use nomes descritivos para suas variáveis e métodos. O nome “x” é péssimo, o nome “retornaQualquerCoisa()” também;
  4. Reduza ao máximo o escopo das variáveis. Ter um “i” global é uma péssima prática de programação;
  5. Divida sua aplicação em camadas:
    5.1. Crie classes de negócios para representar seus dados (classe Funcionario);
    5.2. Crie classe para carregar seus objetos de negócio em listas (classe FuncionarioDao);
    5.3. Só então, use as duas na interface gráfica, de preferência criando models próprios (classe FuncionarioTableModel);
  6. Trate de maneira adequada as exceptions. Não imprima só o getMessage(), mas todo o StackTrace. Jamais ignore exceptions deixando o catch vazio.

Programar não é uma das tarefas mais fáceis do mundo. Sem organização, ela fica ainda mais difícil. Código bagunçado irá conspirar contra você mesmo.

kbardock15

Muda o Campo dtNascimento para Date e tenta fazer uma consulta do tipo :

" Select nomeFuncionarios From Funcionarios Where Month(DtNascimento) = " + mes ;

JennyMelo

Muito obrigado pelas dicas… estou começando agora…mais pode ter certeza de q as dicas são muito bem vindas e q vou reorganizar todo o codigo… agora em relação a sua dica kbardock15 vou fazer o testes e posto aki se deu certo ou não…

JennyMelo

Olá... finalmente consegui resolver esse problema e agradeço as dicas foram muito boas... Obrigado

Crei uma classe exclusiva pra o Formulario de aniversariantes... ficou assim...

void pegaMes(String mes){
        this.mes = mes;
    }



    DefaultListModel retornaFunc() {

        int x = 0;
        String func, fim;
        String data, dia, mes2;

        try {
            ResultSet resultado = bd.consultaTable("SELECT COUNT(id_func) FROM funcionario WHERE mes ='"+mes+"'");

            if (resultado != null && resultado.next()) {
                do {

                    x = (resultado.getInt("COUNT(id_func)"));

                } while (resultado.next());
            } else {
            }
        } catch (java.sql.SQLException e) {
            System.err.println("erro de SQL:" + e.getMessage());
        }


        DefaultListModel model = new DefaultListModel();
        int i = 0;


        while (i < x) {
            i++;

            try {
                ResultSet resultado = bd.consultaTable("SELECT * FROM funcionario WHERE id_func ='" + i + "' AND mes = '"+mes+"'");

                if (resultado != null && resultado.next()) {
                    do {
                        func = (resultado.getString("nome"));
                        data = (resultado.getString("dt_nascimento"));

                        dia = data.substring(8,10);
                        mes2 = data.substring(5,7);
                        data = dia+"/"+mes2;
                        fim = func+" - "+data;


                        model.addElement(fim);
                    } while (resultado.next());
                } else {
                    x++;
                }

            } catch (java.sql.SQLException e) {
                System.err.println("erro de SQL:" + e.getMessage());
            }

        }

        return model;

    }
Essa e a ação q esta no JButton...
String mes;

        mes = comboMes.getSelectedItem().toString();
        ani.pegaMes(mes);

        DefaultListModel resultado = ani.retornaFunc();
        lstAniversarios.setModel(resultado);

-> Assim ele gera uma lista completa... selecionando tds os funcionários q fazem aniversarios em determinado mês...
sei q tem uma forma mais limpa de se fazer isso mais funcionou perfeitamente assim...

Criado 23 de setembro de 2010
Ultima resposta 28 de set. de 2010
Respostas 8
Participantes 3