Pesquisa no Banco

Boa tarde.

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…

Se ele retorna tudo, então é obvio que o erro está aqui:

Cara, o certo, na sua query, é:

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()) ";

d34d_d3v1l isso eu concordo…Mas soluciono como?

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 ?

Ninguém? :stuck_out_tongue:

Debuga seu código e vê qual consulta ele ta mandando pro banco…

1 - Ainda não percebi ao certo o que é que tu queres e o que é que mostra. Queres os do dia e mostra todos ou queres todos e só mostra os do dia?

2 - Não podes fazer isto:

if (!rs.next()) {  
    JOptionPane.showMessageDialog(null, "Hoje não foi aberto nenhum chamado.");  
}  
String selecionado = "";  
while (rs.next()) {  

No if vais pular para a primeira linha do result set. No while pulas para a segunda sem teres tratado da primeira, que nunca irá aparecer.

3 - Parece que esta parte deveria estar só depois de terminar o while, certo?

rel.PreencherText(selecionado); rel.setVisible(true);

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

Não to entendendo seu problema

Poste a consulta que está dando problema, o resultado gerado por ela e o resultado esperado, para ficar mais claro!!

[code]public void ChamaUsuarioHj() {

    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!

Debuga sua app e pega a sql que ela tá mandando pro banco e posta ai que eu do uma olhada, talvez ele ta montando a consulta d forma errada…

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.