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…
[code]
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];
}[/code]
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…
É impressão minha, ou no seu banco mês é um String?
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…
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…
Você deve corrigir seu método retornaAlgumaCoisa():
[code]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();
} [/code]
Do jeito que está, ele só está pegando um dos funcionários da lista.
Outra coisa, seu código está extremamente bagunçado.
Seria bom você reorganiza-lo. Algumas dicas:
- 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;
- 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;
- Use nomes descritivos para suas variáveis e métodos. O nome “x” é péssimo, o nome “retornaQualquerCoisa()” também;
- Reduza ao máximo o escopo das variáveis. Ter um “i” global é uma péssima prática de programação;
- 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);
- 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.
Muda o Campo dtNascimento para Date e tenta fazer uma consulta do tipo :
" Select nomeFuncionarios From Funcionarios Where Month(DtNascimento) = " + mes ;
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…
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…
[code]
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;
}[/code]
Essa e a ação q esta no JButton…
[code]
String mes;
mes = comboMes.getSelectedItem().toString();
ani.pegaMes(mes);
DefaultListModel resultado = ani.retornaFunc();
lstAniversarios.setModel(resultado);[/code]
-> 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…