Estou com um problema com uma consulta no banco, na verdade ocorre o seguinte:
Quando executo a consulta, ele me retorna um resultado diferente…Vou postar o código e já explico:
public void ChamaUsuarioHj() {
String comando = "Select b.Nome, a.ProtocoloID, a.dataRegistro, a.Problema, a.Situacao";
comando += " from tblRegistro a Join tblUsuario b On a.Nome = b.Nome";
comando += " Where a.Nome = '" + form.getNome() + "' AND DAY(a.dataRegistro) = DAY(GETDATE()) ";
try {
Statement stmt = cx.fazConexao().createStatement();
ResultSet rs = stmt.executeQuery(comando);
if (!rs.next()) {
JOptionPane.showMessageDialog(null, "Hoje não foi aberto nenhum chamado.");
}
String selecionado = "";
while (rs.next()) {
String nome = rs.getString("Nome");
int protocolo = rs.getInt("ProtocoloID");
Date dataRegistro = rs.getDate("dataRegistro");
String problema = rs.getString("Problema");
int situacao = rs.getInt("Situacao");
form.setProtocolo(protocolo);
selecionado += " Nome: ";
selecionado += nome;
selecionado += "\n";
selecionado += " Protocolo: ";
selecionado += String.valueOf(form.getProtocolo());
selecionado += "\n";
selecionado += " Data de Registro: ";
selecionado += dataRegistro.toString();
selecionado += "\n";
selecionado += " Situação: ";
selecionado += situacao;
selecionado += "\n";
selecionado += " Problema: ";
selecionado += problema;
selecionado += "\n";
selecionado += "--------------------------------------------------------";
selecionado += "--------------------------------------------------------";
rel.PreencherText(selecionado);
rel.setVisible(true);
}
} catch (Exception e) {
e.printStackTrace();
JOptionPane.showMessageDialog(null, "Usuário inválido ou houve um erro na busca.");
}
}
A consulta me retorna todos os chamados DO DIA atual do usuário que eu digitei o nome.
Só que ele não retorna isso, ele me mostra TODOS os chamados do usuário, inclusive, hoje, ontém, mês passado, tudo.
Eu executo esta consulta no SQL Server 2008 e ele me retorna o resultado da consulta certinho.
Não sei o que acontece…
String sql = "SELECT b.Nome, a.ProtocoloID, a.dataRegistro, a.Problema, a.Situacao" +
" FROM tblRegistro a" +
" INNER JOIN tblUsuario b ON a.ID = b.ID" + // Repare no uso de um Id para unir as tabelas
" WHERE a.Nome like '" + form.getNome() + "'" +
" AND DAY(a.dataRegistro) = DAY(GETDATE()) ";
aluisiodsv não possui ID no banco, ele possui um Full text index onde o meu Indice de tabela é um varchar Nome.
Usando o LIKE não resolveria meu problema, pois posso ter um usuário Chamado Ana e outra Analy e ele me retornaria o resultado dos 2…Ele precisaria ser o resultado exato, mas isso acho que não resolveria nem se realmente desse certo, o problema não sei onde está…
Digo isso, por que quando executo esta Query DIRETO NO BANCO, ele me retorna correto…
Por que isso SÓ no Java d34d_d3v1l ?
Na verdade eu quero que ele mostre 1 ou o que satisfaz o Select e ele mostra tudo!!
Quando não há usuário ele mostra a mensagem correta, mas do contrário nada.
Essa parte está certa, ele mostra normal lá…Só mostra tudo =O
String comando = "Select b.Nome, a.ProtocoloID, a.dataRegistro, a.Problema, a.Situacao";
comando += " from tblRegistro As a Join tblUsuario As b On a.Nome = b.Nome";
comando += " Where a.Nome = '" + form.getNome() + "' AND DAY(a.dataRegistro) = DAY(GETDATE()) ";
int i = 0;
try {
Statement stmt = cx.fazConexao().createStatement();
ResultSet rs = stmt.executeQuery(comando);
String selecionado = "";
while (rs.next()) {
i++;
String nome = rs.getString("Nome");
int protocolo = rs.getInt("ProtocoloID");
Date dataRegistro = rs.getDate("dataRegistro");
String problema = rs.getString("Problema");
int situacao = rs.getInt("Situacao");
form.setProtocolo(protocolo);
selecionado += " Nome: ";
selecionado += nome;
selecionado += "\n";
selecionado += " Protocolo: ";
selecionado += String.valueOf(form.getProtocolo());
selecionado += "\n";
selecionado += " Data de Registro: ";
selecionado += dataRegistro.toString();
selecionado += "\n";
selecionado += " Situação: ";
selecionado += situacao;
selecionado += "\n";
selecionado += " Problema: ";
selecionado += problema;
selecionado += "\n";
selecionado += "--------------------------------------------------------";
selecionado += "--------------------------------------------------------";
rel.PreencherText(selecionado);
}
if (i == 0) {
rel.PreencherText("Não há chamados para este usuário!");
}
rel.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
JOptionPane.showMessageDialog(null, "Usuário inválido ou houve um erro na busca.");
}
}
[/code]
Eu tenho este código que faz o seguinte:
Ele seleciona todos estes dados que estão aí com a condição de o usuário ser igual ao digitei E o DIA da data de hoje(getdate()) seja igual ao dia de hoje.
Ou seja, ele era para me mostrar todos os chamados do usuário X que abriram chamados HOJE apenas, amanhã já não mostra de hoje e sim de amanhã.
Ele me mostra todos os chamados abertos para este usuário, mas se o usuário não existe ou não abriu nenhum ele mostra que não abriu ou não existe!!
Entendeu?
**ESTE CÓDIGO DIRETO NO SQL FUNCIONA PERFEITAMENTE!
Uma vez que a única coisa que precisas de tabela tblUsuario é o nome, que também tens na tblRegistro, não precisas de fazer o join e basta obter valores da tblRegistro.
Isto apesar de me parecer que nome é uma má escolha para chave da tabela.
Esse DAY() retorna o dia da data? Quer dizer que, como está, hoje vai retornar os registos de hoje mas também os de 10 de Janeiro e os de 10 de Dezembro do ano passado e todos os outros de todos os dias 10. Não me parece que seja isso que pretendes.